2014-06-21 2 views
2

Je sais que cela peut être en double, mais je n'ai pas trouvé la meilleure solution. Je rencontre simplement un problème d'utilisation de ListBox.ItemTemplate, je veux le contenu Grid à HorizontalAlignment = "Stretch" (pas de travail). J'ai donc essayé de lier la largeur de la grille au ListBoxItem, mais le dernier élément se comporte bizarrement. Si lier à la largeur de ListBox, il y aura une barre de défilement, bien qu'un convertisseur puisse le résoudre, je pense qu'il doit y avoir une solution plus simple et élégante.Meilleure façon d'étendre le contenu de WPF ListBox.ItemTemplate à la largeur de ListBoxItem

Codebehind:

public partial class MainWindow : Window 
{ 
    public MainWindow() 
    { 
     InitializeComponent(); 
     this.DataContext = new List<Data>() 
     { 
      new Data("a1","a2"), 
      new Data("b1","b2"), 
      new Data("c1","c2") 
     }; 
    } 
     public class Data 
     { 
      public Data(string s1, string s2) 
      { 
       this.S1 = s1; 
       this.S2 = s2; 
      } 
      public string S1 { get; set; } 
      public string S2 { get; set; } 
     } 
    } 

Xaml:

<Grid> 
    <ListBox ItemsSource="{Binding}"> 
     <ListBox.ItemTemplate> 
      <DataTemplate> 
       <Grid Background="Blue" 
         Width="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type ListBox}}, 
        Path=ActualWidth, Mode=OneWay}" 
         > 
        <Grid.ColumnDefinitions> 
         <ColumnDefinition/> 
         <ColumnDefinition/> 
        </Grid.ColumnDefinitions> 
        <TextBlock Text="{Binding S1, Mode=OneWay}" 
           FontSize="20" Grid.Column="0"/> 
        <TextBlock Text="{Binding S2, Mode=OneWay}" 
           FontSize="20" Grid.Column="1"/> 
       </Grid> 
      </DataTemplate> 
     </ListBox.ItemTemplate> 
    </ListBox> 
</Grid> 

enter image description here enter image description here enter image description here

Répondre

3

Essayez de mettre ListBoxItem « s HorizontalContentAlignment-Strecth, par exemple:

<ListBox ItemsSource="{Binding}"> 
    <ListBox.ItemContainerStyle> 
     <Style TargetType="ListBoxItem"> 
      <Setter Property="HorizontalContentAlignment" Value="Stretch"/> 
     </Style> 
    </ListBox.ItemContainerStyle> 
</ListBox> 
+2

Cela fonctionne, sauvé beaucoup de temps et de code! –

Questions connexes