SharedSizeGroup
SharedSizeGroup allows sharing size information for autosized row and column definitions across multiple Grid controls.
Example
The following example demonstrates how SharedSizeGroup can be used to consistently size columns within a ListBox and outside.
- XML
- C#
<StackPanel Grid.IsSharedSizeScope="True">
<StackPanel.Styles>
<Style Selector="ListBoxItem">
<Setter Property="Padding" Value="0" />
</Style>
</StackPanel.Styles>
<ListBox ItemsSource="{Binding People}">
<ListBox.ItemTemplate>
<DataTemplate>
<Grid Name="myGrid" RowDefinitions="auto, auto" ShowGridLines="True">
<Grid.ColumnDefinitions>
<ColumnDefinition SharedSizeGroup="A" />
<ColumnDefinition SharedSizeGroup="B" />
<ColumnDefinition Width="*" />
<ColumnDefinition SharedSizeGroup="C" />
</Grid.ColumnDefinitions>
<TextBlock Grid.Column="0" Margin="6,0" Text="{Binding FirstName}" />
<TextBlock Grid.Column="1" Margin="6,0" Text="{Binding LastName}" />
<TextBlock Grid.Column="2" Margin="6,0" Text="{Binding Age}" />
<TextBlock Grid.Column="3" Margin="6,0" Text="{Binding Occupation}" />
</Grid>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
<!-- Controls may appear in-between Grids with SharedSizeGroups -->
<Separator />
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition SharedSizeGroup="A" />
<ColumnDefinition SharedSizeGroup="B" />
<ColumnDefinition Width="*" />
<ColumnDefinition SharedSizeGroup="C" />
</Grid.ColumnDefinitions>
<Button Content="This is the First Name" HorizontalAlignment="Stretch" Grid.Column="0" />
<Button Content="Last" HorizontalAlignment="Stretch" Grid.Column="1" />
<Button Content="Age" HorizontalAlignment="Stretch" Grid.Column="2" />
<Button Content="Occupation" HorizontalAlignment="Stretch" Grid.Column="3" />
</Grid>
</StackPanel>
public record Person(string FirstName, string LastName, int Age, string Occupation);
public partial class MainWindowViewModel : ViewModelBase
{
public ObservableCollection<Person> People { get; } = new()
{
new("Jim", "Smith", 35, "Printed Circuit Board Drafter"),
new("Charlotte", "O'Shaughnessy-Alejandro", 30, "Librarian"),
new("Ryan", "Cullen", 40, "Ceramics Instructor"),
new("Valentina", "Levine", 38, "Oceanologist")
};
}
Notice how each column is sized: the first column is sized by the Button, the second and fourth are sized
by the ListBox content, and the third takes the remaining space.