wpf - 如何使 WPF ListBox 中的项目水平和垂直换行
问题描述
我想显示一个缩略图列表,并允许用户选择一个。AListBox
似乎是一个显而易见的选择,将模板设置为包含缩略图和描述。
以下代码正确执行此操作...
<ListBox Margin="5"
Name="BackgroundsLb">
<ListBox.ItemTemplate>
<DataTemplate>
<Border Margin="5"
BorderBrush="Black"
BorderThickness="1">
<StackPanel Margin="5">
<Image Source="{Binding Path=Data, Converter={StaticResource BytesToImageVC}}"
Width="150"
HorizontalAlignment="Center" />
<TextBlock Text="{Binding Path=Description}"
HorizontalAlignment="Center" />
</StackPanel>
</Border>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
但是,这会垂直显示缩略图,每行一个,这对于 a 来说是正常的ListBox
。鉴于缩略图只有 150 像素宽,我想以更像网格的方式显示它们,但(理想情况下)以某种方式显示它们,以便列数适应窗口的大小。
我尝试用 替换ListBox
,ItemsControl
添加以下内容...
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<WrapPanel Orientation="Vertical" />
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
...它完全显示了我想要的方式,但是ItemsControl
不允许选择,所以对我的目的没有用。
有没有办法实现一个灵活的、可选择的显示来填充水平空间,并根据窗口的大小分成新的一行?
谢谢
解决方案
您可以在 a 中使用一个ItemsPanelTemplate
,就像在 .ListBox
中使用一个一样ItemsControl
。我认为您看到的不同之处在于ListBox
默认情况下使用滚动条而不是包装内容。基本上允许内容永远增长,所以你永远不会得到包装。相反,您会得到一个滚动条。好消息是您可以禁用此行为。以下内容应为您提供水平换行,其中根据需要创建新行。
<ListBox ScrollViewer.HorizontalScrollBarVisibility="Disabled">
<ListBox.ItemsPanel>
<ItemsPanelTemplate>
<WrapPanel Orientation="Horizontal" />
</ItemsPanelTemplate>
</ListBox.ItemsPanel>
</ListBox>
推荐阅读
- ssh - 如何通过step server从内网网站获取网站的正确视图?
- vb.net - 使用 ComboBox Vb.net ReportViewer 过滤数据
- vue.js - 禁用按钮直到响应 VUE
- javascript - 如何用Javascript中的另一个按钮更改按钮的颜色
- javascript - chrome性能选项卡中的“优化代码”是什么意思?
- mysql - 在特定的 MySQL 线程上执行查询 - IDEA
- ios - 无法为模拟器构建应用程序。(M1芯片)
- python - tf.keras.preprocessing.image_dataset_from_directory 没有从目录中读取所有图像,而只是其中的一部分
- html - 在 Blazor 中返回字符串
- python - 多次更新 shapefile 中的数据