1
我想直觀地表示列中的數據,而不是DataGrid的行表示。您可以將我的數據視爲List<Column>
,其中列包含List<Cell>
。我不轉置數據並僅使用DataGrid的原因是我希望能夠動態添加/刪除列,而無需處理所有數據。在自定義wpf數據網格中同步行高
+--------------------------------------------+
| | Col Header | Col Header | ... |
| Row Header | Cell | Cell | ... |
| ... | ... | ... | ... |
+--------------------------------------------+
我有XAML的樣本是幾乎沒有什麼我想:
<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>
但是,我怎麼能保證我行始終是對齊的?由於列中的單元格包含在單個ItemsControl中,因此保證它們是對齊的。但是,每個列都位於自己的StackPanel內。有沒有辦法確保所有的行都對齊?
此外,這似乎是一個很好的解決方案,或者是否有更好的選擇?
您應該能夠使用[Grid.IsSharedSizeScope](HTTP ://msdn.microsoft.com/en-us/library/system.windows.controls.grid.issharedsizescope.aspx)使您的行共享一個大小。過去我曾經使用過列,但沒有理由它不能用於行。 – Rachel 2012-02-01 04:12:26
@Rachel這實際上有幫助。添加它作爲答案,以便我可以接受它。謝謝。 – Rado 2012-02-01 19:44:05
完成,謝謝:) – Rachel 2012-02-01 20:38:30