Подтвердить что ты не робот

Как я могу сделать столбец в списке в 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>
4b9b3361

Ответ 1

Вы можете использовать прикрепленное свойство IsSharedSizeScope. В определении шаблона присоедините группу "общего размера" к каждому столбцу, например:

<Grid.ColumnDefinitions>
    <ColumnDefinition SharedSizeGroup="col1" />
    <ColumnDefinition SharedSizeGroup="col2" />
</Grid.ColumnDefinitions>

... затем определите свой ListBox как область общего размера, чтобы он знал, чтобы каждый размер группы был таким же образом:

<ListBox Grid.IsSharedSizeScope="True">...</ListBox>