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

时间:2009-07-09 09:14:54

标签: wpf listbox width itemtemplate

我的ListBox ItemTemplateTextBlockComboBox组成。问题是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 个答案:

答案 0 :(得分:65)

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

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

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

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