2009-07-09 19 views
40

Tôi có một số ListBox với số ItemTemplate bao gồm TextBlockComboBox. Vấn đề là chiều rộng của văn bản bên trong TextBlock không giống nhau cho mỗi mục và các điều khiển ComboBox không được căn chỉnh.
Làm cách nào tôi có thể đặt TextBlock trong mẫu để tất cả các mục đều có cùng chiều rộng, đó là một trong những phần rộng nhất?Làm cách nào để tạo một cột trong hộp danh sách trong WPF có cùng chiều rộng cho tất cả các mục?

Đây là XAML của tôi:

<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> 

Trả lời

63

Bạn có thể sử dụng tài sản gắn liền IsSharedSizeScope. Trong định nghĩa mẫu của bạn, đính kèm một "nhóm kích thước được chia sẻ" cho mỗi cột, như thế này:

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

... sau đó xác định ListBox của bạn như là một phạm vi kích thước chia sẻ để nó biết kích thước mỗi "nhóm kích thước" giống cách:

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

Hoàn hảo, cảm ơn –

Các vấn đề liên quan