Flux de la zone de liste les deux éléments de données séparément, et utiliser un modèle de données. Voici comment.
D'abord, créer une petite classe pour représenter chaque élément que vous souhaitez insérer:
public class WordPair {
public string First { get; set; }
public string Second { get; set; }
}
(Vous avez probablement déjà une classe appropriée et/ou d'une collection dans votre application - Je suppose que les paires de chaînes sont ! venant de quelque part)
Deuxièmement, définissez votre ListBox.ItemsSource à une collection de ces choses:
listBox.ItemsSource = new List<WordPair> {
new WordPair { First = "ITEM A", Second = "ITEM B" },
new WordPair { First = "ITEM X", Second = "ITEM Y" },
};
Encore une fois, cette collection peut déjà exister dans votre application.
Troisièmement, créer un DataTemplate spécifiant la disposition souhaitée, et l'affecter à votre ListBox.ItemTemplate:
<!-- in your Window.Resources section -->
<DataTemplate x:Key="AlignedPairs">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*" />
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<TextBlock Text="{Binding First}" Grid.Column="0" />
<TextBlock Text="->" TextAlignment="Center" Grid.Column="1" />
<TextBlock Text="{Binding Second}" TextAlignment="Right" Grid.Column="2" />
</Grid>
</DataTemplate>
<ListBox Name="listBox" ItemTemplate="{StaticResource AlignedPairs}">
<ListBox.ItemContainerStyle>
<Style TargetType="ListBoxItem">
<Setter Property="HorizontalContentAlignment" Value="Stretch" />
</Style>
</ListBox.ItemContainerStyle>
</ListBox>
(je l'ai deviné l'alignement exact que vous voulez pour les articles, mais vous pouvez évidemment modifier Il.)
Notez que vous devez également définir le HorizontalContentAlignment de ListBoxItems à Stretch en utilisant ListBox.ItemContainerStyle. Sinon, chaque ListBoxItem occupera uniquement l'espace dont il a besoin, ce qui entraînera une taille minimale de toutes les colonnes Grid et une concaténation droite. Stretch fait que chaque ListBoxItem remplit toute la largeur, de sorte que les colonnes Grid sont obligées de croître en conséquence.
Avez-vous testé cela? Cela a semblé très prometteur, mais je n'ai pas pu trouver de toute façon pour définir HorizontalAlignment ou HorizontalContentAlignment à travers Listbox.ItemContainerStyle, et en utilisant exactement ce que vous avez mis ne donne aucune mise en forme du tout. Cela produit ce que cela ferait: listbox.Items.Ajouter ("ARTICLE 1" + "->" + "ARTICLE 2"); etc etc – baron
J'ai mis à jour avec le ItemContainerStyle requis. Cela fonctionne dans mon environnement de test (notez que j'ai supposé que ITEM 2 devait être aligné correctement et que vous pourriez avoir besoin de le modifier si vous voulez un alignement différent). – itowlson
Merci beaucoup, c'est une solution parfaite. J'ai une autre question, Comment pourrais-je ajouter un titre? c'est-à-dire avant que j'aie eu listbox.Add ("Prénom" + "Nom de famille"); mais maintenant je ne peux pas le faire avec Itemssource. Y a-t-il d'autres façons que d'ajouter un objet dans la collection qui agit comme titre? c'est-à-dire Firstname = "FIRST NAME" et Secondname = "SECOND NAME"? Peut-être que je viens de définir un label/textblock au-dessus de la liste – baron