如何在WPF的列表框中为所有项目创建相同宽度的列?

Jul*_*lin 42 wpf listbox itemtemplate width

我有一个ListBoxItemTemplate组成的TextBlockComboBox.问题是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>
Run Code Online (Sandbox Code Playgroud)

Mat*_*ton 66

您可以使用附加的IsSharedSizeScope属性.在模板定义中,将"共享大小组"附加到每个列,如下所示:

<Grid.ColumnDefinitions>
    <ColumnDefinition SharedSizeGroup="col1" />
    <ColumnDefinition SharedSizeGroup="col2" />
</Grid.ColumnDefinitions>
Run Code Online (Sandbox Code Playgroud)

...然后将ListBox定义为共享大小范围,以便它知道以相同的方式调整每个"大小组"的大小:

<ListBox Grid.IsSharedSizeScope="True">...</ListBox>
Run Code Online (Sandbox Code Playgroud)

  • 很好的答案,但很难相信任何从“1”开始数的人......;-) (3认同)