如何在WPF的列表框中使所有项目的列宽相同?

41

我有一个带有ItemTemplateListBox,其中包含一个TextBlock和一个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个回答

68

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

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

如果想要让ListBox按照相同的方式设置每个“大小组”的大小,请将其定义为共享大小范围。

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

5
回答不错,但是很难相信那些从「1」开始数数的人...;-) - JKoplo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接