Визуальные артефакты при вертикальной прокрутке DataGrid после RotateTransform

Я использовал этот ответ StackOverflow, чтобы повернуть DataGrid таким образом, чтобы заголовки столбцов отображались как заголовки строк, а новый DataGrid строки будут отображаться как столбцы (горизонтальная DataGrid).

В стиле DataGrid у меня есть ControlTemplate, который состоит из ScrollContentPresenter и двух полос прокрутки (вертикальной и горизонтальной). CanContentScroll имеет значение true для ScrollContentPresenter, поэтому ячейки будут прокручиваться логически, а не физически. Выдержка из этого 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).

Моя цель — устранить артефакты вертикальной прокрутки либо путем логической прокрутки, либо путем исправления проблем с рендерингом (предпочтительно).

Изменить. Мой вопрос заключается в следующем: как я могу устранить эти визуальные артефакты из-за прокрутки повернутой сетки данных?


person Ryan T    schedule 04.02.2014    source источник
comment
Это не сформулировано как вопрос - на что конкретно вам здесь нужно ответить? Я предполагаю, что вы спрашиваете, как исправить проблемы с рендерингом, но это должно быть ясно.   -  person Chris Ballard    schedule 04.02.2014
comment
Это правильно. Последнее утверждение в посте описывает мои цели, которые я должен был сформулировать как вопрос. Пост отредактирую.   -  person Ryan T    schedule 04.02.2014