Горизонтальная полоса прокрутки ScrollViewer перемещает содержимое с фиксированной высотой вверх - PullRequest
0 голосов
/ 24 сентября 2019

У меня есть сетка с двумя столбцами, которая содержит два пользовательских элемента управления.Два элемента управления вместе составляют таблицу / таблицу данных.Причина, по которой я разделил эту таблицу / таблицу данных на две части, заключается в том, что второй элемент управления (тот, что справа) может быть очень большим по горизонтали, поэтому его необходимо обернуть в ScrollViewer.Тот, что слева, действует как заголовок и должен быть виден постоянно, его нельзя прокручивать из поля зрения.Две части имеют одинаковую высоту.

Проблема, как вы можете видеть ниже, заключается в том, что горизонтальная полоса прокрутки средства просмотра прокрутки выдвигает вторую часть вместо того, чтобы занимать свое собственное пространство.

enter image description here

Обратите внимание, вертикальная полоса прокрутки ScrollViewer не используется, поскольку высота таблицы относительно мала.

Вот как это должно выглядеть:

enter image description here

То, что я пробовал до сих пор:

  • Я пытался добавить строку в сетку (как auto и* heights) и наложил на него ScrollViewer, но безрезультатно.
  • Я установил высоту этой строки, чтобы она соответствовала высоте полосы прокрутки, что сработало, но я вижу две огромные проблемы с этим подходом:
    1. Если полоса прокрутки не нужна (второй элемент управления не очень большой по горизонтали), эта строка становится пустым пространством, которое используется ни для чего, вроде как поле, которое нежелательно, в любом случае, в моем случае, нежелательно.
    2. Это ненадежно, так как использует жесткий кодМы знаем, что размер полосы прокрутки может изменяться от среды к среде и от темы к теме.

Ответы [ 2 ]

1 голос
/ 27 сентября 2019

Для этого вам нужен только один набор данных.

Просто установите HorizontalScrollBarVisibility="Auto" и FrozenColumnCount="1".

enter image description here

0 голосов
/ 27 сентября 2019

Если элементы управления раздельные, вы можете просто установить поле на дне одного контейнера, а не другого

<Grid>
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="400" />
            <ColumnDefinition Width="*" />
        </Grid.ColumnDefinitions>
        <Grid Margin="0,0,0,18">
            <DataGrid>

            </DataGrid>
        </Grid>

        <ScrollViewer Grid.Column="1" VerticalScrollBarVisibility="Hidden" HorizontalScrollBarVisibility="Visible">
            <DataGrid>

        </DataGrid>
        </ScrollViewer>
    </Grid>
...