2012-01-31 3 views
1

DataGrid의 행 표현이 아닌 열의 데이터를 시각적으로 나타내려고합니다. 내 데이터를 List<Column>으로 생각할 수 있습니다. 여기에서 한 열에는 List<Cell>이 포함되어 있습니다. 데이터를 조 변경하지 않고 DataGrid를 사용하는 이유는 모든 데이터를 처리 할 필요없이 동적으로 열을 추가/제거 할 수 있기를 원하기 때문입니다.사용자 지정 wpf 데이터 격자의 행 높이 동기화

그러나
<StackPanel Orientation="Horizontal"> 
    <StackPanel Orientation="Vertical" VerticalAlignment="Top"> 
     <TextBox Text="" IsReadOnly="True" BorderThickness="0" HorizontalAlignment="Stretch"/> 
     <TextBox Text="" IsReadOnly="True" BorderThickness="0,0,0,2" BorderBrush="Black" HorizontalAlignment="Stretch"/> 
     <ItemsControl ItemsSource="{Binding RowHeaders}"> 
     <ItemsControl.ItemsPanel> 
      <ItemsPanelTemplate> 
       <StackPanel Orientation="Vertical"/> 
      </ItemsPanelTemplate> 
     </ItemsControl.ItemsPanel> 
     <ItemsControl.ItemTemplate> 
      <DataTemplate> 
       <TextBox Text="{Binding Mode=OneWay}" IsReadOnly="True" BorderThickness="0,0,2,2" BorderBrush="Black" FontWeight="Bold" /> 
      </DataTemplate> 
     </ItemsControl.ItemTemplate> 
     </ItemsControl> 
    </StackPanel> 
    <ItemsControl ItemsSource="{Binding Columns}"> 
     <ItemsControl.ItemsPanel> 
     <ItemsPanelTemplate> 
      <StackPanel Orientation="Horizontal" /> 
     </ItemsPanelTemplate> 
     </ItemsControl.ItemsPanel> 
     <ItemsControl.ItemTemplate> 
     <DataTemplate> 
      <StackPanel Orientation="Vertical" > 
       <TextBox Text="{Binding ColHead1, Mode=OneWay}" IsReadOnly="True" BorderThickness="0" FontWeight="Bold" HorizontalAlignment="Stretch"/> 
       <TextBox Text="{Binding ColHead2, Mode=OneWay}" IsReadOnly="True" FontWeight="Bold" BorderThickness="0,0,0,2" BorderBrush="Black" HorizontalAlignment="Stretch"/> 
       <ItemsControl ItemsSource="{Binding Cells}"> 
        <ItemsControl.ItemsPanel> 
        <ItemsPanelTemplate> 
         <StackPanel Orientation="Vertical" /> 
        </ItemsPanelTemplate> 
        </ItemsControl.ItemsPanel> 
        <ItemsControl.ItemTemplate> 
        <DataTemplate> 
         <TextBox x:Name="textBox" Text="{Binding}" IsReadOnly="{Binding IsReadOnly}" BorderThickness="0,0,0,2" BorderBrush="Black" HorizontalAlignment="Stretch"/> 
        </DataTemplate> 
        </ItemsControl.ItemTemplate> 
       </ItemsControl> 
      </StackPanel> 
     </DataTemplate> 
     </ItemsControl.ItemTemplate> 
    </ItemsControl> 
</StackPanel> 

, 어떻게 내 행이 항상 정렬되었는지도 확인 할 수 있습니다

+--------------------------------------------+ 
|   | Col Header | Col Header | ... | 
| Row Header | Cell | Cell  | ... | 
| ...  |  ... | ...  | ... | 
+--------------------------------------------+ 

나는 거의 내가 원하는 무엇 XAML의 샘플을 가지고? 열 내의 셀은 단일 ItemsControl 내에 포함되어 있기 때문에 정렬되도록 보장됩니다. 그러나 각 열은 자체 StackPanel 안에 있습니다. 모든 행이 정렬되도록하는 방법이 있습니까?

또한 문제 해결을위한 좋은 해결책 인 것처럼 보이거나 더 나은 대안이 있습니까?

+0

뿐만 아니라 행을 사용할 수없는 이유가 (없다 HTTP : //msdn.microsoft.com/en-us/library/system.windows.controls.grid.issharedsizescope.aspx) 행을 크기를 공유 할 수 있습니다. 과거에는 열을 사용했지만 그 행에도 사용할 수 없습니다. – Rachel

+0

@Rachel 이것은 실제로 도움이되었습니다. 내가 그것을 받아 들일 수 있도록 대답으로 추가하십시오. 감사. – Rado

+0

완료, 감사합니다 :) – Rachel

답변

0

행을 크기를 공유하려면 Grid.IsSharedSizeScope을 사용할 수 있어야합니다.

내가 연결되지 않은 열을 같은 크기로 만들기 위해 과거에 사용했습니다, 그리고 당신은 [Grid.IsSharedSizeScope] 사용할 수 있어야합니다

관련 문제