У меня ситуация, когда мое приложение C # WPF содержит ListView, элементы которого являются Expanders. Каждый из этих расширителей содержит ListView с ListViewItems. Вот картинка:
Справа вы видите полосу прокрутки. И эта полоса прокрутки - моя проблема. У него есть две проблемы:
Полоса прокрутки не работает при использовании колеса мыши над развернутым списком . Под этим я подразумеваю область от «Контроллера» до «Полная установка». При наведении курсора на заголовок («Все тесты») полоса прокрутки прокручивается. Я думаю, что ListView внутри Expander по умолчанию имеет ScrollBar, который «крадет» событие MouseWheel. Однако я не знаю, что с этим делать.
Полоса прокрутки прокручивает элементы Expander, а не содержимое модулей расширения . Под этим я подразумеваю, что невозможно прокрутить немного вниз, вместо этого вы всегда прокручиваете вниз хотя бы 1 элемент Expander. Я бы хотел, чтобы полоса прокрутки прокручивалась так, чтобы можно было увидеть, например, половину расширителя «Все тесты».
На рисунке показана отключенная полоса прокрутки, но при уменьшении окна полоса прокрутки становится активной.
То, что я пробовал до сих пор:
ScrollViewer за пределами внешнего ListView : Это решает проблему 1, однако это значит, что MouseWheel вообще не работает! Это связано с тем, что внешний ListView генерирует свой собственный ScrollViewer (для выяснения этого используется Snoop), который «крадет» события MouseWheel.
Перенаправляет все события MouseWheel всех элементов управления (ListView, Expander, ListViewItem) на ScrollViewer : Я снова использовал ScrollViewer вне внешнего ListView, и на этот раз я использовал событие MouseWheel для всех моих элементов управления, чтобы вызвать событие MouseWheel внешнего ScrollViewer. Это действительно сработало, однако для некоторых местоположений указателя мыши - нет. Например, между двумя ListViewItems есть небольшое пространство в 1 миллиметр, где событие MouseWheel не улавливается. Или внизу после последнего расширителя («Короткие тесты»). Там я не получаю никакого события.
Я попробовал еще пару вещей, но дальше ничего не вышло. Есть у кого-нибудь идеи, как это решить?
С наилучшими пожеланиями, Christian