2016-02-24 33 views
1

我想在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> 

回答

0

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