web-dev-qa-db-ja.com

WPFのリストボックスの列をすべてのアイテムで同じ幅にするにはどうすればよいですか?

ListBoxItemTemplateで構成される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>
42
Julien Poulin

IsSharedSizeScope 添付プロパティを使用できます。テンプレート定義で、次のように「共有サイズグループ」を各列に添付します。

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

...次に、ListBoxを共有サイズスコープとして定義し、各「サイズグループ」のサイズを同じ方法で認識できるようにします。

<ListBox Grid.IsSharedSizeScope="True">...</ListBox>
67
Matt Hamilton