WPF - 为什么列表框项目不填充uniformgrid

时间:2008-12-30 07:21:59

标签: wpf listbox itemspaneltemplate

我有一个列表框,其ItemsPanelTemplate设置为UniformGrid,行数= 6,cols = 7.

我希望列表框项目填满他们的空间。

我正在使用字典中定义的数据完成。

我的模板的外部控件是一个带有Horizo​​ntalAlignment = Stretch的边框 和VerticalAlignent = Strectch但模板没有填充列表框项空间?

有什么想法吗? 马尔科姆

2 个答案:

答案 0 :(得分:10)

答案是在LISTBOX而不是datatemplate上将Horizo​​ntalContentAligment和VerticalContentAlignment设置为Stretch。

答案 1 :(得分:2)

已编辑:已添加其他信息,并回复了问题。

ListBoxItems与其他项目保持一致的有趣方法是Grid

中的DataTemplate共享范围功能

示例:

<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的布局尺寸都相同。如果未设置特定宽度/高度,子项应填充所有可用空间。

或者你可以将控件的宽度和高度设置为拉伸,但我认为使用Grid.SharedScopeSize是一种更优雅的方法来实现相同的效果。