【问题标题】:UniformGrid reduce spacing between rows in WPFUniformGrid 减少 WPF 中的行间距
【发布时间】:2015-04-29 18:00:48
【问题描述】:

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

我怎样才能减少这种情况?

【问题讨论】:

    标签: c# wpf uniformgrid


    【解决方案1】:

    正如人们所说,您的 UniformGrid 有太多垂直空间,因此它会扩展行以占用所有空间(延伸)。

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

    VerticalAlignment="Top"
    

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        【解决方案3】:

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

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

        【讨论】:

        • 显示结果的数量只有在大多数情况下才会固定。即使添加或删除少数项目的可能性很小
        • 您可以添加不显示任何输出的虚拟条目,以便列表条目的数量强制每个单元格更小。但实施起来更加困难。
        • 是否有任何替代选项可以实现相同的效果?如果我使用 ItemsControl 我无法获得 ListBoxItem selection 的效果。否则我可以在 ItemsControl 中使用 WrapPanel。但是在这里它也超出了范围
        • 您可以在 ListBox 中使用 WrapPanel。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-03-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多