如何在WPF的列表框中为所有项目设置相同的宽度列?

问题描述:

我有一个ListBoxItemTemplateTextBlockComboBox组成。问题是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> 
+0

完美,谢谢 – 2009-07-09 09:26:17