42 votes

Comment créer une colonne dans une zone de liste dans WPF avec la même largeur pour tous les éléments?

J'ai un ListBox avec un ItemTemplate consistant en un TextBlock et un ComboBox . Le problème est que la largeur du texte à l'intérieur des TextBlock n'est pas la même pour chaque élément et que les contrôles ComboBox ne sont pas alignés.
Comment puis-je définir les TextBlock dans le modèle afin que tous les éléments aient la même largeur, c'est-à-dire l'un des plus larges?

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

66voto

Matt Hamilton Points 98268

Vous pouvez utiliser la propriété jointe IsSharedSizeScope . Dans la définition de votre modèle, attachez un "groupe de taille partagée" à chaque colonne, comme suit:

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

... puis définissez votre ListBox comme une portée de taille partagée afin qu'il sache dimensionner chaque "groupe de taille" de la même manière:

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X