我正在使用WPF UniformGrid绑定项目的alist,而xaml就是这样的
<ListBox Name="lviewSearch" ItemsSource="{Binding SearchSettingsCollection}" SelectionMode="Multiple">
<ListBox.ItemsPanel>
<ItemsPanelTemplate>
<UniformGrid Columns="2"/>
</ItemsPanelTemplate>
</ListBox.ItemsPanel>
<ListBox.ItemTemplate>
<DataTemplate>
<ItemsControl Margin="3" Padding="5">
<DockPanel>
<Label Content="{Binding Label}" HorizontalAlignment="Stretch" Cursor="Hand" />
</DockPanel>
</ItemsControl>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
但是如果项目的数量不足则行之间的间距太大了 http://i.stack.imgur.com/Xr5qy.png
我怎样才能减少这种感觉?
答案 0 :(得分:2)
就像人们说的那样,你的UniformGrid有太多的垂直空间,因此它会扩展行以占据所有空间(延伸)。
您需要做的是通过设置
来防止拉伸的默认行为VerticalAlignment="Top"
答案 1 :(得分:0)
UniformGrid 的重点是单元格的大小是均匀的,因此大小相同。如果与垂直空间相比只有少量行,那么每行都会很高。相反,如果你有很多行和很小的垂直空间,那么每一行都变得很小。如果这不是一个合适的外观,那么你需要使用不同的布局方法。
在不了解视觉设计的情况下,无法推荐可能的替代方案。 ListBox总是大小相同还是高度不一?显示结果的数量是变化还是保持不变?所有这些都会改变您实现所需结果的方式。
答案 2 :(得分:0)
一个简单的解决方案是在Listbox外部使用网格。将行高设置为auto。现在统一网格将根据需要占用最小空间。
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<ListBox Name="lviewSearch" ItemsSource="{Binding SearchSettingsCollection}" SelectionMode="Multiple">
<ListBox.ItemsPanel>
<ItemsPanelTemplate>
<UniformGrid Columns="2"/>
</ItemsPanelTemplate>
</ListBox.ItemsPanel>
<ListBox.ItemTemplate>
<DataTemplate>
<ItemsControl Margin="3" Padding="5">
<DockPanel>
<Label Content="{Binding Label}" HorizontalAlignment="Stretch" Cursor="Hand" />
</DockPanel>
</ItemsControl>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
</Grid>