Как я могу сделать столбец в списке в WPF одинаковой шириной для всех элементов?
У меня есть ListBox
с ItemTemplate
, состоящим из TextBlock
и a ComboBox
. Проблема в том, что ширина текста внутри TextBlock
не одинакова для каждого элемента, а элементы управления ComboBox
не выравниваются.
Как я могу установить TextBlock
в шаблоне, чтобы все элементы были одинаковой ширины, то есть самой широкой?
Вот мой xaml:
<ListBox MinHeight="100" ItemsSource="{Binding Trainees}">
<ListBox.ItemTemplate>
<DataTemplate>
<Grid Margin="1">
<Grid.ColumnDefinitions>
<ColumnDefinition />
<ColumnDefinition />
</Grid.ColumnDefinitions>
<TextBlock VerticalAlignment="Center" Grid.Column="0">
<TextBlock.Text>
<MultiBinding StringFormat="{}{0}, {1}">
<Binding Path="LastName" />
<Binding Path="FirstName" />
</MultiBinding>
</TextBlock.Text>
</TextBlock>
<ComboBox HorizontalAlignment="Left" Grid.Column="1"
ItemsSource="{Binding Source={StaticResource Functions}}" SelectedValue="{Binding Path=Function}"
MinWidth="100" />
</Grid>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
Ответы
Ответ 1
Вы можете использовать прикрепленное свойство IsSharedSizeScope. В определении шаблона присоедините группу "общего размера" к каждому столбцу, например:
<Grid.ColumnDefinitions>
<ColumnDefinition SharedSizeGroup="col1" />
<ColumnDefinition SharedSizeGroup="col2" />
</Grid.ColumnDefinitions>
... затем определите свой ListBox как область общего размера, чтобы он знал, чтобы каждый размер группы был таким же образом:
<ListBox Grid.IsSharedSizeScope="True">...</ListBox>