Отключить прокрутку ScrollViewer на время - PullRequest
0 голосов
/ 06 августа 2020

У меня ScrollViewer с ItemPresenter внутри. ItemsPresenter содержит несколько раскрывающихся списков, и когда я открываю один из них, я хотел бы отключить прокрутку родительского ScrollViewer и снова включить его только тогда, когда раскрывающийся список закрыт. Говоря «отключить», я имею в виду запретить прокрутку вообще (даже с помощью колеса мыши).

Я пытался установить VerticalScrollBarVisibility на Disabled следующим образом:

<ScrollViewer HorizontalScrollBarVisibility="Disabled"
              VerticalScrollBarVisibility="Disabled">
   <ItemsPresenter />
</ScrollViewer>

но это тоже не работает. Он просто скрывает полосу прокрутки, но колесо мыши по-прежнему работает .

Итак, есть ли способ полностью отключить прокрутку ScrollViewer?

Вот полный код, который у меня есть:

<ListView.Template>
   <ControlTemplate>
      <ScrollViewer HorizontalScrollBarVisibility="Disabled"
                    VerticalScrollBarVisibility="{Binding IsScrollEnabled, Converter={StaticResource BoolToVisibilityConverter}}">
         <ItemsPresenter />
      </ScrollViewer>
   </ControlTemplate>
</ListView.Template>

PS Есть много похожих вопросов вроде this и this , но ни один из них не тот, который я хотел .

1 Ответ

1 голос
/ 06 августа 2020

Вы можете отключить прокрутку, обработав событие PreviewMouseWheel для ScrollViewer.

<ScrollViewer HorizontalScrollBarVisibility="Disabled"
              VerticalScrollBarVisibility="{Binding IsScrollEnabled, Converter={StaticResource BoolToVisibilityConverter}}"
              PreviewMouseWheel="UIElement_OnPreviewMouseWheel">
   <ItemsPresenter />
</ScrollViewer>
private void UIElement_OnPreviewMouseWheel(object sender, MouseWheelEventArgs e)
{
   e.Handled = true;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...