Как сделать столбец в списке в 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>