2012-04-05 5 views
0

Ich habe ListView, die eine GridView verwendet, um mehrere Datenspalten anzuzeigen.Übereinstimmendes vertikales Layout in verschiedenen ItemsControls

Zwei der Spalten haben Zellenvorlagen, die ItemControl enthalten, um eine kleine Sammlung in jeder Zelle anzuzeigen.

Das Problem, das ich habe, ist, dass die vertikale Größe der ItemControl s in keiner Weise verbunden ist, da sie in verschiedenen Zellen sind, und daher nicht in einer Reihe.

zB: (beachten Sie, dies ist ONE ROW in der übergeordneten Listenansicht)

XAML bisher:

<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> 

Mein erster Gedanke war ein Raster wie die ItemsPanel zu verwenden von der ItemsControls, so könnte ich SharedSizeScope in den Zeilen verwenden, um sie auszurichten. Ich kann jedoch keine Möglichkeit sehen, Elemente, die dynamisch von ItemsControl erstellt werden, bestimmten Rasterzeilen zuzuweisen.

Kann jemand eine bessere Lösung vorschlagen?

+0

Meinen Sie nicht 'horizontalen Stackpanel' nicht 'vertikale'? – Phil

+0

@Phil: Entschuldigung, Gehirn Furz. Ich meinte ItemsControl. Habe bearbeitet. (Hat an stackpanel gedacht, da ItemsControl Kinder standardmäßig stapelt) – GazTheDestroyer

+0

Also gibt es einen Modus für jeden Blah? Wenn ja, warum zeigt Ihr View-Modell das nicht so an? – Phil

Antwort

0

Managed dies zu beheben, indem ListView.ItemContainerStyle.VerticalContentAlignment Einstellung, zu dehnen und dann UniformGrid ‚s für die ItemsControl Platten verwendet:

Jede Zelle jetzt erstreckt sich vertikal die größte Zelle passen, und unter Verwendung von UniformGrid Splits, dass die vertikale Größe für jede gleichmäßig Artikel.

zB

<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>