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>
Cela fonctionne, sauvé beaucoup de temps et de code! –