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

Я использовал этот ответ Stackru, чтобы повернуть 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. Похоже, что Transforms влияют на вычисленный DisplayHeight ячеек во время прокрутки и заставляют их "исчезать", прежде чем они будут действительно за кадром. (примечание: логическая прокрутка (CanContentScroll = true) отключает виртуализацию DataGridCells).

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

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

0 ответов

Другие вопросы по тегам