2010-11-24 33 views
1

comme le dit le titre: Existe-t-il une manière élégante d'activer des colonnes spécifiques dans un UniformGrid dynamique?Une manière élégante d'activer des colonnes spécifiques dans un UniformGrid dynamique peut être redimensionnable

Les détails:

J'ai un ItemsControl et régler le ItemsPanelTemplate être de type UniformGrid. Le ItemTemplate est défini sur un contrôle personnalisé qui rend le contenu de la colonne.

Voici l'extrait de XAML:

<ItemsControl x:Name="PART_Dimensions" 
      Grid.Column="1" HorizontalAlignment="Stretch"> 
    <ItemsControl.ItemsPanel> 
    <ItemsPanelTemplate> 

     <UniformGrid Columns="{Binding 
      Path=ItemsSource.Count, 
      RelativeSource={RelativeSource FindAncestor, 
      AncestorType={x:Type ItemsControl}}}" 
         IsItemsHost="True"/> 

    </ItemsPanelTemplate> 
    </ItemsControl.ItemsPanel> 
    <ItemsControl.ItemTemplate> 
    <DataTemplate> 

      <local:Dimension 
       PropertyA="{Binding SourceA}" 
       ItemsSource="{Binding SourceB}" /> 

    </DataTemplate> 
</ItemsControl.ItemTemplate> 

Maintenant, ce que je suis en train de réaliser est de rendre possible, que les colonnes spécifiques sont redimensionnables, en leur donnant une largeur statique tout en permettant les autres colonnes doivent être dimensionnées uniformément en largeur.

Quelqu'un a-t-il une direction à me montrer? J'espérais éviter des implémentations personnalisées trop spécifiques du Rendu de UniformGrid, y a-t-il un moyen intelligent et facile de le faire?

merci à l'avance en ce qui concerne Ole

Répondre

1

Si vous essayez de garder quelques colonnes avec une largeur statique et laisser les autres ont une largeur dynamique, je dirais UniformGrid est pas le droit Panel pour aller avec. Pourquoi ne pas aller avec un StackPanel avec Horizontal Orientation? De votre code, je vois que vous avez seulement besoin d'une rangée.

Si cela ne fonctionne pas pour vous, passez à Grid. Vous aurez besoin d'écrire du code mais cela vous donnera les meilleurs résultats. Vous pouvez utiliser GridSplitter pour redimensionner les colonnes Grid.

+0

Merci decyclone. J'ai essayé un StackPanel en premier lieu, mais j'ai eu des problèmes en dimensionnant automatiquement le contenu des "colonnes" à la plus grande largeur possible. Au début, une grille semble être un bon choix, mais est-il possible de le laisser faire le template qu'un ItemsControl vous permet de faire? –

+1

Bien sûr que c'est possible. Cet article (http://www.scottlogic.co.uk/blog/colin/2010/11/using-a-grid-as-the-panel-for-an-itemscontrol/) vous montre comment faire cela. – decyclone

+0

On dirait que vous avez sauvé ma journée. Merci beaucoup. Je vais essayer ça. –