UniformGrid减少了WPF中行之间的间距



我正在使用WPF UniformGrid来绑定项目列表,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>

但是,如果项目数量较少,那么行之间的间距就太像这样了https://i.stack.imgur.com/Xr5qy.png

我该怎么做?

正如人们所说,你的UniformGrid有太多的垂直空间,所以它会扩展行以占据所有的空间(拉伸)。

你需要做的是通过设置来防止这种默认的拉伸行为

VerticalAlignment="Top"

UniformGrid的全部意义在于单元格的大小是一致的,因此大小相同。如果与垂直空间相比,你只有少量的行,那么每一行都会很高。相反,如果你有很多行,而垂直空间很小,那么每一行都会变得很小。如果这不是一个合适的外观,那么您需要使用不同的布局方法。

如果不了解更多关于视觉设计的信息,就不可能推荐一种可能的替代方案。ListBox的大小总是一样的,还是高度不同?显示的结果数量是变化的还是保持不变?所有这些都会改变你实现所需结果的方式。

一个简单的解决方案是在Listbox之外使用网格。将行高设置为自动。现在,统一网格将根据需要占用最小的空间。

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

相关内容

  • 没有找到相关文章

最新更新