如何在WPF的列表框中为所有项目设置相同的宽度列?
问题描述:
我有一个ListBox
与ItemTemplate
由TextBlock
和ComboBox
组成。问题是TextBlock
中的文本宽度对每个项目都不相同,并且ComboBox
控件未对齐。
如何在模板中设置TextBlock
以便所有项目具有相同的宽度,即最宽的一个?如何在WPF的列表框中为所有项目设置相同的宽度列?
这是我的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>
完美,谢谢 – 2009-07-09 09:26:17