手势识别 - 操作事件不会触发

Gesture Recognition - Manipulation Events do not fire

我正在尝试在 Windows 10 移动 (UW) 应用程序中使用 ManipulationStarted 和 ManipulationDelta 事件实现手势识别。但是有一个问题 - 他们不开火。

最有可能的问题是我的 xaml 视图过于复杂(我在 ListView 中有 Horizo​​ntalyScrollable GridView - 为了启用垂直滚动,它全部打包在 ScrollViewer 中)。但是我尝试将这些事件添加到所有容器中,但它们仍然没有触发。

有人have/know有什么解决方案吗?下面是我的 xaml 页面树:

     <ScrollViewer Grid.Row="2" x:Name="SubscribersView" ManipulationStarted="SubscribersView_ManipulationStarted" ManipulationDelta="SubscribersView_ManipulationDelta">
      (......)   
                    <ListView 
                          Margin="0"
                          Grid.Row="0"
                          SelectionMode="None"
                          IsItemClickEnabled="True"
                          ScrollViewer.HorizontalScrollMode="Disabled" 
                          ScrollViewer.VerticalScrollMode="Disabled" 
                          HorizontalAlignment="Stretch" >

                     <ListView.ItemTemplate>
                        <DataTemplate>
                            <Grid>
                                (......)
                                <GridView Grid.Row="1" 
                                      HorizontalAlignment="Stretch" 
                                      Margin="-10"
                                      SelectionMode="None"
                                      IsItemClickEnabled="True"
                                      ScrollViewer.HorizontalScrollMode="Enabled" 
                                      ScrollViewer.VerticalScrollMode="Disabled" 
                                      ScrollViewer.HorizontalScrollBarVisibility="Visible">

                                    <GridView.ItemsPanel>
                                        <ItemsPanelTemplate>
                                            <VirtualizingStackPanel Orientation="Horizontal"></VirtualizingStackPanel>
                                        </ItemsPanelTemplate>
                                    </GridView.ItemsPanel>
                                </GridView>
                            </Grid>
                        </DataTemplate>
                    </ListView.ItemTemplate>
                </ListView>

对于您尝试处理操作事件的 ScrollViewer,将 ManipulationMode 设置为全部 - 或根据需要设置。

阅读更多:

https://msdn.microsoft.com/en-us/library/windows/apps/windows.ui.xaml.uielement.manipulationmode

我找到了解决方案——我使用了 scrollviwer 的 ViewChanged :以下是解决方案

private void SubscribersView_ViewChanged(object sender, ScrollViewerViewChangedEventArgs e)
            {
                var sv = sender as ScrollViewer;

                var verticalOffset = sv.VerticalOffset;
                var minVerticalOffset = sv.ExtentHeight - sv.ViewportHeight;
                var maxVerticalOffset = sv.ScrollableHeight;

                if (maxVerticalOffset < 0 || verticalOffset == maxVerticalOffset || minVerticalOffset <= 0 || verticalOffset <= 0)
                {
                    //reached top or bottom
                    return;
                }

                if (verticalOffset > previousVerticalOffset)
                {
                    //Scroll down
                    if (!popularHidden)
                    {
                        MainImageSlideOut.Begin();
                        popularHidden = true;
                    }
                }
                else
                {
                    //Scroll up
                    if (popularHidden)
                    {
                        MainImageSlideIn.Begin();
                        popularHidden = false;
                    }
                }
                previousVerticalOffset = verticalOffset;
            }