UniformGrid减少WPF中行之间的间距

时间:2015-02-27 05:20:21

标签: c# wpf uniformgrid

我正在使用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

我怎样才能减少这种感觉?

3 个答案:

答案 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>