2009-07-09 8 views
40

Tengo un ListBox con un ItemTemplate que consiste en un TextBlock y un ComboBox. El problema es que el ancho del texto dentro de TextBlock no es el mismo para cada elemento y los controles ComboBox no están alineados.
¿Cómo puedo configurar el TextBlock en la plantilla para que todos los elementos tengan el mismo ancho, que es el más ancho?¿Cómo puedo hacer que una columna en un cuadro de lista en WPF tenga el mismo ancho para todos los artículos?

Aquí es mi 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> 

Respuesta

63

Puede utilizar la propiedad adjunta IsSharedSizeScope. En su definición de plantilla, adjuntar un "grupo de tamaño compartida" para cada columna, de esta manera:

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

... entonces definir su ListBox como alcance el tamaño compartida por lo que sabe el tamaño de cada "grupo de tamaño" de la misma manera:

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

Perfecto, gracias –

Cuestiones relacionadas