2012-04-05 3 views
0

J'ai ListView qui utilise un GridView pour afficher plusieurs colonnes de données.Mise en page verticale correspondante dans différents ItemsControls

Deux des colonnes ont des modèles de cellule contenant ItemControl pour afficher une petite collection dans chaque cellule. Le problème que j'ai, c'est que la taille verticale des ItemControl s n'est pas connectée car ils sont dans des cellules différentes, et donc ils ne sont pas alignés.

par exemple: (note c'est une ligne dans la listview mère)

XAML jusqu'à présent:

<ListView Margin="6,6,6,0" ItemsSource="{Binding Controllers}"> 
    <ListView.ItemContainerStyle> 
     <Style TargetType="ListViewItem" > 
      <Setter Property="VerticalContentAlignment" Value="Top" /> 
     </Style> 
    </ListView.ItemContainerStyle> 
    <ListView.View> 
     <GridView> 

     <!-- snip other columns --> 

     <GridViewColumn Header="Mode"> 
      <GridViewColumn.CellTemplate> 
       <DataTemplate> 
        <ItemsControl ItemsSource="{Binding Modes}" DisplayMemberPath="Name"/> 
       </DataTemplate> 
      </GridViewColumn.CellTemplate> 
     </GridViewColumn> 

     <GridViewColumn Header="Parameters"> 
      <GridViewColumn.CellTemplate> 
       <DataTemplate> 
        <ItemsControl ItemsSource="{Binding Modes}"> 
         <ItemsControl.ItemTemplate> 
          <DataTemplate> 
           <StackPanel Orientation="Horizontal"> 
            <TextBlock Text="Blah:" Margin="5,0"/> 
            <ComboBox> 
             <ComboBoxItem>Hello</ComboBoxItem> 
            </ComboBox> 
           </StackPanel> 
          </DataTemplate> 
         </ItemsControl.ItemTemplate> 
        </ItemsControl> 
       </DataTemplate> 
      </GridViewColumn.CellTemplate> 
     </GridViewColumn> 
    </GridView> 
    </ListView.View> 
</ListView> 

Ma première pensée était d'utiliser une grille comme ItemsPanel du ItemsControls, donc je pourrais utiliser SharedSizeScope sur les lignes pour les aligner. Cependant, je ne vois aucun moyen d'attribuer des éléments créés dynamiquement par ItemsControl à des lignes de grille spécifiques.

Quelqu'un peut-il suggérer une meilleure solution?

+0

Ne pas vous dire 'StackPanel horizontal' et non 'verticale'? – Phil

+0

@Phil: Désolé, pet de cerveau. Je voulais dire ItemsControl. Avoir édité. (Pensez à stackpanel puisque ItemsControl empile les enfants par défaut) – GazTheDestroyer

+0

Y a-t-il un mode pour chaque bla? Si oui, pourquoi votre modèle de vue ne l'expose-t-il pas comme ça? – Phil

Répondre

0

réussi à résoudre ce problème en réglant ListView.ItemContainerStyle.VerticalContentAlignment Stretch, puis en utilisant UniformGrid « s pour les ItemsControl panneaux:

Chaque cellule s'étend maintenant verticalement pour correspondre à la plus grande cellule, et en utilisant UniformGrid divise cette taille verticale uniformément pour chaque article.

par exemple

<GridViewColumn Header="Mode"> 
    <GridViewColumn.CellTemplate> 
     <DataTemplate> 
      <ItemsControl ItemsSource="{Binding Modes}" DisplayMemberPath="Name"> 
       <ItemsControl.ItemsPanel> 
        <ItemsPanelTemplate> 
         <UniformGrid Columns="1"/> 
        </ItemsPanelTemplate> 
       </ItemsControl.ItemsPanel> 
      </ItemsControl> 
     </DataTemplate> 
    </GridViewColumn.CellTemplate> 
</GridViewColumn> 
Questions connexes