Пузырящиеся события прокрутки от ListView до его родителя

В моем приложении WPF у меня есть a ListView чей ScrollViewer.VerticalScrollBarVisibility установлен на Disabled. Это содержится в a ScrollViewer. Когда я пытаюсь использовать колесо мыши по ListView, внешнее ScrollViewer не прокручивает потому что ListView получает события прокрутки.

Как я могу вызвать ListView позволить событиям прокрутки пузыриться до ScrollViewer?

54
задан M. Dudley 18 October 2009 в 06:16
поделиться

1 ответ

Существуют разные подходы в зависимости от конкретной ситуации, но я обнаружил, что это хорошо работает. Предположим, что ваша основная ситуация такова:

<Window Height="200" Width="200">
<Grid>
    <ScrollViewer Name="sViewer">
        <StackPanel>
            <Label Content="Scroll works here" Margin="10" />
            <ListView Name="listTest" Margin="10" 
                      PreviewMouseWheel="listTest_PreviewMouseWheel" 
                      ScrollViewer.VerticalScrollBarVisibility="Disabled">
                <ListView.ItemsSource>
                    <Int32Collection>
                        1,2,3,4,5,6,7,8,9,10
                    </Int32Collection>
                </ListView.ItemsSource>
                <ListView.View>
                    <GridView>
                        <GridViewColumn Header="Column 1" />
                    </GridView>
                </ListView.View>
            </ListView>
        </StackPanel>
    </ScrollViewer>
</Grid>
</Window>

Поднятие MouseWheelEvent самому во время PreviewMouseWheel, кажется, заставляет ScrollViewer работать. Хотел бы я знать почему, это кажется очень нелогичным.

private void listTest_PreviewMouseWheel(object sender, MouseWheelEventArgs e)
{
    e.Handled = true;
    MouseWheelEventArgs e2 = new MouseWheelEventArgs(e.MouseDevice, e.Timestamp, e.Delta);
    e2.RoutedEvent = UIElement.MouseWheelEvent;
    listTest.RaiseEvent(e2);
}
3
ответ дан 7 November 2019 в 07:48
поделиться
Другие вопросы по тегам:

Похожие вопросы: