2009-07-09 3 views
40

Ich habe eine ListBox mit einer ItemTemplate bestehend aus einer TextBlock und einer ComboBox. Das Problem ist, dass die Breite des Textes in der TextBlock nicht für jedes Element identisch ist und die ComboBox Steuerelemente nicht ausgerichtet sind.
Wie kann ich die TextBlock in der Vorlage festlegen, so dass alle Elemente die gleiche Breite haben, das ist eines der breitesten?Wie kann ich eine Spalte in einer Listbox in WPF für alle Elemente gleich breit machen?

Hier ist meine 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> 

Antwort

63

Sie können die IsSharedSizeScope angebracht Eigenschaft. In Ihrer Vorlage Definition, heften sich an jede Spalte eine „shared Größengruppe“, wie folgt aus:

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

... dann ListBox als Shared Größe Umfang definieren, so dass es von der Größe jedes „Größengruppe“ die gleiche weiß weg:

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

Perfekt, danke –