同步自定义wpf数据网格中的行高度
本文关键字:高度 网格 数据网 自定义 wpf 数据 同步 | 更新日期: 2023-09-27 18:21:59
我想用列来直观地表示我的数据,而不是用DataGrid的行表示。您可以将我的数据视为List<Column>
,其中Column包含List<Cell>
。我不转换数据而只使用DataGrid的原因是,我希望能够动态添加/删除列,而不必处理所有数据。
+--------------------------------------------+
| | 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使您的行共享一个大小。
我过去曾使用过它来使非关联列具有相同的大小,并且没有理由不能将其用于行。