У меня есть сетка данных в средстве просмотра прокрутки. Строки моей таблицы данных могут быть расширены, чтобы показать детали и редактировать элементы строки.
Для того, чтобы «страница» прокручивалась, когда число строк / представление сведений о строках слишком долго толкает сетку, я обрабатываю событие PreviewMouseWheel в сетке данных. Это работает до тех пор, пока в моих строках не появится комбинированный список с раскрывающимся списком, в котором есть достаточно элементов, которые также необходимо прокрутить.
При использовании колесика мыши прокручиваемый список будет прокручиваться, как и внешняя сетка данных, эффективно прокручивая содержимое «позади» выпадающего списка и оставляя выпадающий список не в том месте.
Мой обработчик события PreviewMouseWheel делает следующее:
private void StampPartsDatagrid_PreviewMouseWheelForScrolling(object sender, MouseWheelEventArgs e)
{
StampingScrollViewer.ScrollToVerticalOffset(StampingScrollViewer.VerticalOffset - e.Delta / 3);
}
Я пытался перехватить событие выпадающего / выпадающего в комбо, и пока это работает, если я переместлю мышь за пределы выпадающего списка и прокручиваю колесико, страница не прокручивается.
Я просмотрел много статей о MSDN и SO, но они были в основном о том, чтобы заставить таблицу данных прокручиваться внутри прокрутки просмотра.
Есть ли способ выполнить проверку попадания в событии прокрутки предварительного просмотра? Должен ли я каким-то образом заманивать мышь в ловушку? Должен ли я обрабатывать прокрутку по-другому?
Спасибо
* РЕДАКТИРОВАТЬ * Я решил эту проблему. Я переосмыслил поведение колесика мыши. Просматривая страницу панели настроек Windows для регионов, в которой отображается очень длинный комбинированный список, я обнаружил, что, если комбинированный список был удален, колесико мыши применялось только к удаленному списку. Перемещение мыши за пределы выпадающего списка и прокрутка колесиком не имеют никакого эффекта.
Учитывая это, я применил то же поведение, улавливая события открытия / закрытия закрытия и управляя внешней прокруткой. Мой новый обработчик событий, взятый из этого поста (https://social.msdn.microsoft.com/Forums/vstudio/en-US/6fc503a6-ba53-4395-b9b8-f56301efd097/mousescroll-of-combobox-scrolls-the-page-as-well?forum=wpf), выглядит так:
private void StampPartsDatagrid_PreviewMouseWheelForScrolling(object sender, MouseWheelEventArgs e)
{
if (!bDetailsComboDropped)
{
StampingScrollViewer.ScrollToVerticalOffset(StampingScrollViewer.VerticalOffset - e.Delta / 3);
}
}