ListBox
とItemTemplate
で構成される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>
IsSharedSizeScope 添付プロパティを使用できます。テンプレート定義で、次のように「共有サイズグループ」を各列に添付します。
<Grid.ColumnDefinitions>
<ColumnDefinition SharedSizeGroup="col1" />
<ColumnDefinition SharedSizeGroup="col2" />
</Grid.ColumnDefinitions>
...次に、ListBoxを共有サイズスコープとして定義し、各「サイズグループ」のサイズを同じ方法で認識できるようにします。
<ListBox Grid.IsSharedSizeScope="True">...</ListBox>