在RotateTransform之后垂直滚动DataGrid时的视觉瑕疵

时间:2014-02-04 17:26:12

标签: c# wpf datagrid rotatetransform visual-artifacts

我使用this StackOverflow回答来旋转DataGrid,使列标题显示为行标题,新的DataGrid行显示为列(水平DataGrid)。

在DataGrid的样式中,我有一个ControlTemplate,它包含一个ScrollContentPresenter和两个ScrollBars(垂直和水平)。对于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}" />

此网格的水平滚动按预期工作。然而,垂直滚动仍然是物理上发生的,并且当它们在屏幕外(或在屏幕上)滚动时,在顶行的单元格上发生一些奇怪的视觉伪像。 Screenshots of the artifacts here

当我向下滚动时,当单元格的顶部移动到屏幕外时,单元格的内容(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。看起来Transforms正在影响滚动期间单元格的计算DisplayHeight并导致它们在真正离屏之前“消失”。 (旁注:逻辑滚动(CanContentScroll = true)禁用DataGridCells的虚拟化。)

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

编辑:我的问题如下:如何通过滚动旋转的数据网格消除这些视觉瑕疵?

0 个答案:

没有答案