2012-04-05 10 views
0

GridView을 사용하여 여러 데이터 열을 표시하는 ListView이 있습니다.다른 ItemsControls의 일치하는 세로 레이아웃

두 개의 열에는 각 셀에 작은 컬렉션을 표시하는 ItemControl의 셀 템플릿이 있습니다.

내가 가지고있는 문제는 ItemControl의 세로 크기가 서로 다른 셀에 있기 때문에 어떤 식 으로든 연결되어 있지 않으므로 줄이 맞지 않는다는 것입니다.

예 :

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

내 첫번째 생각은 ItemsPanel으로 그리드를 사용하는 것이었다 : 지금까지

XAML (이주의는 상위 목록보기에서 ONE ROW입니다) ItemsControls의 행을 공유 할 수 있도록 SharedSizeScope를 사용할 수 있습니다. 그러나, ItemsControl에 의해 동적으로 생성 된 항목을 특정 그리드 행에 할당 할 수있는 방법이 없습니다.

누구나 더 나은 해결책을 제안 할 수 있습니까?

+0

당신은 '수평 StackPanel의'을 '수직'하지 의미하지 않는다? – Phil

+0

@ Phil : 죄송합니다, 두뇌 방귀. 나는 ItemsControl을 의미했다. 수정했습니다. (ItemsControl이 기본적으로 자식을 스택하기 때문에 stackpanel을 생각해 보았습니다.) – GazTheDestroyer

+0

그래서 각 blah에 대해 하나의 모드가 있습니까? 그렇다면 왜 당신의 뷰 모델은 그런 모습을 드러내지 않습니까? – Phil

답변

0

스트레칭하는 ListView.ItemContainerStyle.VerticalContentAlignment 설정하고 ItemsControl 패널 UniformGrid 년대를 이용하여이 문제를 해결하기 위해 관리 :

각 셀이 현재 가장 큰 셀에 맞게 세로 뻗어 및 UniformGrid 분할하여 각각 균등 세로 크기 그 목.

예를 들어

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