同步自定义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中。有没有办法确保所有行都对齐?

此外,这似乎是一个很好的解决方案,还是有更好的选择?

同步自定义wpf数据网格中的行高度

您应该能够使用Grid.IsSharedSizeScope使您的行共享一个大小。

我过去曾使用过它来使非关联列具有相同的大小,并且没有理由不能将其用于行。