3

我使用这个 StackOverflow答案来旋转 DataGrid,使列标题显示为行标题,而新的 DataGrid 行将显示为列(水平 DataGrid)。

在 DataGrid 的样式中,我有一个 ControlTemplate,它由一个 ScrollContentPresenter 和两个 ScrollBar(垂直和水平)组成。ScrollContentPresenter 的 CanContentScroll 设置为“true”,以便单元格以逻辑方式而不是物理方式滚动。此 ControlTemplate 的摘录如下所示:

    <ScrollContentPresenter x:Name="PART_ScrollContentPresenter"
                        CanContentScroll="{TemplateBinding CanContentScroll}"
                        CanHorizontallyScroll="False"
                        Grid.ColumnSpan="2"
                        CanVerticallyScroll="False"
                        ContentTemplate="{TemplateBinding ContentTemplate}"
                        Content="{TemplateBinding Content}"
                        ContentStringFormat="{TemplateBinding ContentStringFormat}"
                        Grid.Row="1" />
    <ScrollBar x:Name="PART_VerticalScrollBar"
            Grid.Column="2"
            Grid.RowSpan="3"
            Maximum="{TemplateBinding ScrollableHeight}"
            Orientation="Vertical"
            Visibility="{TemplateBinding ComputedVerticalScrollBarVisibility}"
            Value="{Binding VerticalOffset, Mode=OneWay, RelativeSource={RelativeSource TemplatedParent}}"
            ViewportSize="{TemplateBinding ViewportHeight}" />

            [... some code omitted ...]

    <ScrollBar x:Name="PART_HorizontalScrollBar"
                Grid.Column="1"
                Maximum="{TemplateBinding ScrollableWidth}"
                Orientation="Horizontal"
                Visibility="{TemplateBinding ComputedHorizontalScrollBarVisibility}"
                Value="{Binding HorizontalOffset, Mode=OneWay, RelativeSource={RelativeSource TemplatedParent}}"
                ViewportSize="{TemplateBinding ViewportWidth}" />

此网格的水平滚动按预期工作。但是,垂直滚动仍然会在物理上发生,并且当单元格滚动到屏幕外(或返回屏幕)时,会在第一行单元格上出现一些奇怪的视觉伪影。文物截图在这里

当我向下滚动时,单元格(TextBlock)的内容会随着单元格顶部移出屏幕而消失。当我继续在单元格中垂直滚动时,背景颜色会水平“擦除”。

以下是我应用于网格的变换:

应用于 DataGridCells 的样式

 <TransformGroup>
    <RotateTransform Angle="-90" />
    <ScaleTransform ScaleX="1" ScaleY="-1" />
 </TransformGroup>

应用于列标题的样式

    <TransformGroup>
       <RotateTransform Angle="90" />
       <MatrixTransform Matrix="-1, 0, 0, 1, 0, 0" />
    </TransformGroup>

应用于 DataGrid 的样式

<TransformGroup>
   <RotateTransform Angle="90" />
   <MatrixTransform Matrix="-1, 0, 0, 1, 0, 0" />
</TransformGroup>

有所有的 LayoutTransforms,而不是 RenderTransforms。似乎变换在滚动期间影响了单元格的计算 DisplayHeight,并导致它们在真正离开屏幕之前“消失”。(旁注:逻辑滚动 (CanContentScroll = true) 禁用 DataGridCells 的虚拟化)。

我的目标是通过逻辑滚动或纠正渲染问题(首选)来消除垂直滚动伪影。

编辑:我的问题如下:由于滚动旋转的数据网格,如何消除这些视觉伪影?

4

0 回答 0