stop Listview from capturing mouse scroll inside ScrollViewer in XAML
您好,我正在制作UWP应用,在其中一个页面上我想要一个类似体验的网站,这意味着在页面上滚动很长。
我在页面上的枢轴内有一个Listview。
看起来像这样。
1 2 3 4 5 6 7 8 9 10 11 12 | <ScrollViewer x:Name="scrollViewer" ManipulationMode="All" ScrollViewer.IsVerticalScrollChainingEnabled="True" VerticalScrollBarVisibility="Auto"> <RelativePanel> <Image /> <Pivot> <Listview /> </Pivot> <Other stuff /> </RelativePanel> |
现在我的问题是,当我将鼠标悬停在除列表视图之外的任何对象上时,鼠标滚动工作正常,一旦鼠标悬停在列表视图上,滚动就无法工作。
我尝试创建像这样的自定义ListView样式,但是不起作用。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 | <Style x:Key="NoScrollListViewStyle" TargetType="ListView"> <Setter Property="IsTabStop" Value="False" /> <Setter Property="TabNavigation" Value="Once" /> <Setter Property="IsSwipeEnabled" Value="False" /> <Setter Property="ScrollViewer.HorizontalScrollBarVisibility" Value="Disabled" /> <Setter Property="ScrollViewer.VerticalScrollBarVisibility" Value="Disabled" /> <Setter Property="ScrollViewer.HorizontalScrollMode" Value="Disabled" /> <Setter Property="ScrollViewer.IsHorizontalRailEnabled" Value="False" /> <Setter Property="ScrollViewer.VerticalScrollMode" Value="Disabled" /> <Setter Property="ScrollViewer.IsVerticalRailEnabled" Value="False" /> <Setter Property="ScrollViewer.ZoomMode" Value="Disabled" /> <Setter Property="ScrollViewer.IsDeferredScrollingEnabled" Value="False" /> <Setter Property="ScrollViewer.BringIntoViewOnFocusChange" Value="True" /> <Setter Property="ItemContainerTransitions"> <Setter.Value> <TransitionCollection> <AddDeleteThemeTransition /> <ContentThemeTransition /> <ReorderThemeTransition /> <EntranceThemeTransition IsStaggeringEnabled="False" /> </TransitionCollection> </Setter.Value> </Setter> <Setter Property="ItemsPanel"> <Setter.Value> <ItemsPanelTemplate> <ItemsStackPanel Orientation="Vertical" /> </ItemsPanelTemplate> </Setter.Value> </Setter> <Setter Property="Template"> <Setter.Value> <ControlTemplate TargetType="ListView"> <Border BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Background="{TemplateBinding Background}"> <ScrollViewer x:Name="ScrollViewer" AutomationProperties.AccessibilityView="Raw" BringIntoViewOnFocusChange="{TemplateBinding ScrollViewer.BringIntoViewOnFocusChange}" HorizontalScrollMode="Disabled" HorizontalScrollBarVisibility="Hidden" IsHorizontalRailEnabled="False" IsHorizontalScrollChainingEnabled="False" IsVerticalScrollChainingEnabled="False" IsVerticalRailEnabled="False" IsDeferredScrollingEnabled="False" TabNavigation="{TemplateBinding TabNavigation}" VerticalScrollBarVisibility="Disabled" VerticalScrollMode="Disabled" ZoomMode="Disabled"> <ItemsPresenter FooterTransitions="{TemplateBinding FooterTransitions}" FooterTemplate="{TemplateBinding FooterTemplate}" Footer="{TemplateBinding Footer}" HeaderTemplate="{TemplateBinding HeaderTemplate}" Header="{TemplateBinding Header}" HeaderTransitions="{TemplateBinding HeaderTransitions}" Padding="{TemplateBinding Padding}" /> </ScrollViewer> </Border> </ControlTemplate> </Setter.Value> </Setter> </Style> |
有什么想法吗?
我想到的解决方案是捕获
1 2 3 4 | private void ListView_PointerWheelChanged(object sender, PointerRoutedEventArgs e) { ScrollView.ScrollToVerticalOffset(ScrollView.VerticalOffset - e.GetCurrentPoint(ScrollView).Properties.MouseWheelDelta); } |