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
The answer to this to set HorizontalContentAligment and VerticalContentAlignment to Stretch on the LISTBOX not the datatemplate.
EDITED: Added additional information, and replied to question.
An interesting way to make ListBoxItems
be uniform with other items is to the Grid
s 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