WPF - Why Listbox items do not fill uniformgrid

淺唱寂寞╮ 提交于 2019-12-09 18:34:22

问题


I have a listbox with the ItemsPanelTemplate set to UniformGrid with rows= 6 and cols= 7.

I want the listbox items to fill their space.

I am using a datatemplete defined in a dictionary.

The outer control of my template is a Border with HorizontalAlignment=Stretch and VerticalAlignent=Strectch but the templates do not fill the listbox items space?

Any ideas? Malcolm


回答1:


The answer to this to set HorizontalContentAligment and VerticalContentAlignment to Stretch on the LISTBOX not the datatemplate.




回答2:


EDITED: Added additional information, and replied to question.

An interesting way to make ListBoxItems be uniform with other items is to the Grids shared scope feature in your DataTemplate

Example:

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

Now all the TextBlocks will be the same size in your layout. The child item should fill all available space if no specific width/height are set.

Alternatively you can set the Width and Height of the control to stretched, however I think using the Grid.SharedScopeSize is a more elegant way to achieving the same effect.



来源:https://stackoverflow.com/questions/399713/wpf-why-listbox-items-do-not-fill-uniformgrid

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!