Как я могу прослушивать события колеса мыши в поле между двумя элементами в ItemsControl? - PullRequest
1 голос
/ 25 июля 2011

У меня есть 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, но это, похоже, не помогает.Как я могу захватить эти события колеса мыши и направить их вверх по дереву?

1 Ответ

2 голосов
/ 25 июля 2011

Маржа - это область пространства, оставленная вокруг элемента управления, и, поскольку она является просто пустым пространством, она не обрабатывает никаких событий.

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

...