2009-12-30 7 views
1

J'ai un ViewModel dans WPF qui ressemble à ceci:WPF - créer une grille de couleurs

public class SwatchViewModel 
{ 
    public ObservableCollection<Color> Colors { get; private set; } 
} 

Je veux afficher chacune des couleurs de la collection, les étalant dans les colonnes. Chacune des colonnes doit prendre la même quantité d'espace dans le contrôle et toutes les colonnes combinées doivent remplir la largeur du contrôle. Le contrôle peut être dimensionné arbitrairement.

Donc si Colors contenait { Colors.Red, Colors.Green, Colors.Blue } alors je voudrais trois colonnes, chacune occupant un tiers de la largeur du contrôle, avec chaque colonne colorée de manière appropriée.

Quelle est la meilleure façon de procéder? Il semble approprié pour un ItemsControl sauf qu'un ItemsControl n'étire pas ses articles pour remplir la largeur disponible ... c'est un travail pour le Grid ... mais les colonnes de la grille ne peuvent pas être liées ....

XAML est préféré, même si je suis assez content de revenir à C# si nécessaire.

+0

Êtes-vous également intéressé par le comportement de sélection? –

Répondre

4

Vous pouvez utiliser un UniformGrid. Une grille uniforme correspond exactement à vos besoins, elle ajoute des cellules en fonction du nombre d'enfants qu'elle contient.

Exemple:

<ItemsControl ItemsSource="..." ItemTemplate="..."> 
    <ItemsControl.ItemsPanel> 
     <ItemsPanelTemplate> 
      <UniformGrid Rows="1"/> 
     </ItemsPanelTemplate> 
    </ItemsControl.ItemsPanel> 
</ItemsControl> 

Réglage Rows à 1 limite le nombre de lignes à 1 (duh ...).