В моем приложении WPF у меня есть a ListView
чей ScrollViewer.VerticalScrollBarVisibility
установлен на Disabled
. Это содержится в a ScrollViewer
. Когда я пытаюсь использовать колесо мыши по ListView
, внешнее ScrollViewer
не прокручивает потому что ListView
получает события прокрутки.
Как я могу вызвать ListView
позволить событиям прокрутки пузыриться до ScrollViewer
?
Существуют разные подходы в зависимости от конкретной ситуации, но я обнаружил, что это хорошо работает. Предположим, что ваша основная ситуация такова:
<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);
}