Как я могу прослушивать события колесика мыши на полях между двумя элементами в ItemsControl?

У меня есть ItemsControl, который выглядит примерно так:

<ItemsControl ItemsSource="{Binding}" PreviewMouseWheel="ItemsControl_PreviewMouseWheel" >
    <ItemsControl.ItemTemplate>
        <DataTemplate>
            <Grid Margin="0,4"><!--Margin to keep the items from being smashed too closely together-->
                ...
            </Grid>
        </DataTemplate>
    </ItemsControl.ItemTemplate>
</ItemsControl>

ItemsControl будет одним из нескольких элементов в прокручиваемой области, но если я наведу колесико мыши на ItemsControl, ничего не произойдет. Итак, я хочу перенаправить события колесика мыши выше по дереву:

private void ItemsControl_PreviewMouseWheel(object sender, MouseWheelEventArgs e)
{
    e.Handled = true;

    RaiseEvent(new MouseWheelEventArgs(e.MouseDevice, e.Timestamp, e.Delta)
    {
        RoutedEvent = UIElement.MouseWheelEvent
    });
}

Это в основном работает. Но когда мышь прокручивает область Margin (заданную Margin="0,4") между двумя элементами в элементе управления, ничего не происходит. Я попытался поместить сетку в декоратор, например Border, но это, похоже, не помогает. Как я могу захватить эти события колесика мыши и перенаправить их вверх по дереву?


person Matthew    schedule 25.07.2011    source источник


Ответы (1)


Margin — это область пространства, оставшаяся вокруг Control, и, поскольку это просто пустое пространство, оно не обрабатывает никаких событий.

Альтернативой является либо вложение элементов управления, например размещение сетки с полем внутри DockPanel без поля, либо использование элемента управления WPF со свойством Padding, например Border.

person Rachel    schedule 25.07.2011
comment
Спасибо, но, как упоминалось в моем вопросе, это решение не работает - прокрутка пустого места по-прежнему ничего не дает. - person Matthew; 26.07.2011
comment
@ Мэтью Как вы тестировали это раньше? Если вы использовали рамку, указали ли вы цвет фона? Я считаю, что фон по умолчанию прозрачен, что позволяет событиям проходить через элемент управления. - person Rachel; 26.07.2011
comment
Ах, я просто должен был установить фон. Установка его в Transparent — это нормально, но не установка позволяет событиям проходить через элемент управления. Спасибо! - person Matthew; 26.07.2011