WPF - 为什么Listbox项不能填充UniformGrid?

4

我有一个列表框,其中ItemsPanelTemplate设置为UniformGrid,行数为6,列数为7。

我希望列表框中的项填充其空间。

我在字典中定义了一个数据模板。

我的模板外部控件是一个边框,水平对齐方式为Stretch,垂直对齐方式也为Stretch,但是模板不能填充列表框项的空间?

有什么想法吗? Malcolm


你能提供一个XAML示例吗? - huseyint
可能是Items do not fill wpf listbox using datatemplate的重复问题。 - rene
2个回答

12

解决方法是将水平对齐属性HorizontalContentAlignment和垂直对齐属性VerticalContentAlignment设置为Stretch,应用于LISTBOX而不是数据模板。


2

编辑:添加了额外的信息,并回答了问题。

使ListBoxItems与其他项目保持一致的有趣方法是在您的DataTemplate中使用Grid的共享作用域功能。

示例:

<ItemsControl Grid.IsSharedSizeScope="True" ItemsSource="{Binding Path=Items}">
  <ItemsControl.ItemTemplate>
    <DataTemplate>
      <StackPanel Orientation="Horizontal">
        <Grid>
          <Grid.ColumnDefinitions>
            <ColumnDefinition SharedSizeGroup="Content"/>
          </Grid.ColumnDefinitions>
          <TextBlock Grid.Column="1" Text="{Binding Path=Name}">
        </Grid>
      </StackPanel>
    </DataTemplate>
  </ItemsControl.ItemTemplate>
</ItemsControl>

现在你的布局中所有的TextBlocks都将是相同的大小。如果没有设置特定的宽度/高度,子项应填充所有可用空间。
或者,您可以将控件的宽度和高度设置为stretched,但我认为使用Grid.SharedScopeSize是实现相同效果的更优雅的方式。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接