2

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

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

我怎样才能减少这个?

4

3 回答 3

5

就像人们说的那样,您的 UniformGrid 有太多的垂直空间,因此它会扩展行以占用所有空间(拉伸)。

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

VerticalAlignment="Top"
于 2017-11-22T09:38:15.477 回答
0

UniformGrid的重点是单元格的大小是统一的,因此大小相同。如果与垂直空间相比只有少量行,那么每一行都会非常高。相反,如果您有很多行且垂直空间很小,那么每一行都会变得很小。如果这不是合适的外观,那么您需要使用不同的布局方法。

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

于 2015-02-27T05:26:52.687 回答
0

一种简单的解决方案是在 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>
于 2015-12-17T09:49:46.470 回答