代码之家  ›  专栏  ›  技术社区  ›  Julien Poulin

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

  •  41
  • Julien Poulin  · 技术社区  · 16 年前

    我有一个 ListBox 用一个 ItemTemplate 由A组成 TextBlock 和A ComboBox . 问题是,文本的宽度 控件 每个项目和 组合框 控件未对齐。
    我怎么设置 控件 在模板中使所有项的宽度都相同,这是最宽的项之一?

    这是我的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 回复  |  直到 16 年前
        1
  •  64
  •   Matt Hamilton    16 年前

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

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

    ……然后将列表框定义为共享大小范围,这样它就知道如何以相同的方式调整每个“大小组”的大小:

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