Прокрутка ListView содержащий Expanders, которые содержат ListViews, не работает

У меня ситуация, когда мое приложение C # WPF содержит ListView, элементы которого являются Expanders. Каждый из этих расширителей содержит ListView с ListViewItems. Вот картинка: enter image description here

Справа вы видите полосу прокрутки. И эта полоса прокрутки - моя проблема. У него есть две проблемы:

  1. Полоса прокрутки не работает при использовании колеса мыши над развернутым списком . Под этим я подразумеваю область от «Контроллера» до «Полная установка». При наведении курсора на заголовок («Все тесты») полоса прокрутки прокручивается. Я думаю, что ListView внутри Expander по умолчанию имеет ScrollBar, который «крадет» событие MouseWheel. Однако я не знаю, что с этим делать.

  2. Полоса прокрутки прокручивает элементы Expander, а не содержимое модулей расширения . Под этим я подразумеваю, что невозможно прокрутить немного вниз, вместо этого вы всегда прокручиваете вниз хотя бы 1 элемент Expander. Я бы хотел, чтобы полоса прокрутки прокручивалась так, чтобы можно было увидеть, например, половину расширителя «Все тесты».

На рисунке показана отключенная полоса прокрутки, но при уменьшении окна полоса прокрутки становится активной.

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

  1. ScrollViewer за пределами внешнего ListView : Это решает проблему 1, однако это значит, что MouseWheel вообще не работает! Это связано с тем, что внешний ListView генерирует свой собственный ScrollViewer (для выяснения этого используется Snoop), который «крадет» события MouseWheel.

  2. Перенаправляет все события MouseWheel всех элементов управления (ListView, Expander, ListViewItem) на ScrollViewer : Я снова использовал ScrollViewer вне внешнего ListView, и на этот раз я использовал событие MouseWheel для всех моих элементов управления, чтобы вызвать событие MouseWheel внешнего ScrollViewer. Это действительно сработало, однако для некоторых местоположений указателя мыши - нет. Например, между двумя ListViewItems есть небольшое пространство в 1 миллиметр, где событие MouseWheel не улавливается. Или внизу после последнего расширителя («Короткие тесты»). Там я не получаю никакого события.

Я попробовал еще пару вещей, но дальше ничего не вышло. Есть у кого-нибудь идеи, как это решить?

С наилучшими пожеланиями, Christian

5
задан Christian 31 March 2011 в 11:50
поделиться