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

问题描述:

我想在Windows 10移动(UW)应用程序中使用ManipulationStarted和ManipulationDelta事件实现手势识别。但有一个问题 - 他们不开火。手势识别 - 操作事件不会触发

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

有没有人有/知道任何溶剂?下面是我的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> 

我找到了解决办法 - 我用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; 
      } 

ScrollViewer你想处理操纵事件,设置ManipulationMode所有 - 或需要。

了解更多:

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

+0

偏偏这个属性不工作 –