2014-04-04 86 views
2

我在Windows Phone 8中工作,並且在樞軸控件中有兩個數據透視項。 如何檢測我是否向右或向左滑動?檢測樞軸中的滑動方向

+1

檢查[本SO後(http://stackoverflow.com/a/實現這一目標20297442/2982225)和[這篇文章](http://stackoverflow.com/a/18529734/2982225) –

+0

我已經從問題的標題中刪除了一個標籤 - 請注意比大多數情況下的問題[不應該在他們的標籤中包含標籤標題。](http://meta.stackexchange.com/questions/19190/should-questions-include-tags-in -their-titles) – Romasz

回答

6

第一步:添加Microsoft.Phone.Controls.Toolkit在解決方案

第二步:在XAML中添加Microsoft.Phone.Controls.Toolkit參考這樣的:

xmlns:tolkit="clr-namespace:Microsoft.Phone.Controls;assembly=Microsoft.Phone.Controls.Toolkit" 

第三步:創建手勢監聽輕彈事件是這樣的:

<Grid x:Name="LayoutRoot" Background="Transparent"> 
     <tolkit:GestureService.GestureListener> 
      <tolkit:GestureListener Flick="GestureListener_Flick"></tolkit:GestureListener> 
     </tolkit:GestureService.GestureListener> 
     <!--Pivot Control--> 
     <controls:Pivot Title="MY APPLICATION"> 
      <!--Pivot item one--> 
      <controls:PivotItem Header="item1"> 
       <Grid/> 
      </controls:PivotItem> 

      <!--Pivot item two--> 
      <controls:PivotItem Header="item2"> 
       <Grid/> 
      </controls:PivotItem> 
     </controls:Pivot> 
    </Grid> 

第4步:在你的CS頁面添加以下代碼:

private void GestureListener_Flick(object sender, FlickGestureEventArgs e) 
     { 
      if (e.Direction.ToString() == "Horizontal") //Left or right 
      { 
       if (e.HorizontalVelocity > 0) //Right 
       { 

       } 
       else //Left 
       { 

       } 
      } 
     } 

you could download toolkit from here

+0

此代碼適用於我,我已經在我的解決方案中使用,如果您發現任何問題,請告訴我 –

+0

謝謝great expalanation – AnotherGeek

1

對於簡單的情況下(如果你有超過2個樞紐項目),可以使用SelectionChanged事件的支點 - 提供變量中,你將節省最後的SelectedIndex和變更確認後,如果它是正確的或左:

myPivot.SelectionChanged+=myPivot_SelectionChanged; // in your MainPage() 

private int lastSelected = 0; 

private void myPivot_SelectionChanged(object sender, SelectionChangedEventArgs e) 
{ 
    if ((lastSelected + 1 == myPivot.SelectedIndex) || 
     (myPivot.SelectedIndex == 0 && lastSelected == myPivot.Items.Count - 1)) 
    { 
    // moved right 
    } 
    else 
    { 
    // moved left 
    } 

    lastSelected = myPivot.SelectedIndex; 
} 

對於簡單的情況下,它應該工作,對於更復雜的,您可以使用TouchPanel或其他解決方案。

+1

我認爲您的代碼不適用於我的示例,因爲我使用了兩個當我向右或向左移動時,lastSelected和selectedIndex將具有相同的值 – AnotherGeek

+0

如果我向左移動SelectedIndex也是(1)(因爲我只有2個項目),所以我不會區分方向。但如果有三個或更多項目,這是一個很好的解決方案。我認爲我必須在這種情況下使用工具包。謝謝你的幫助 – AnotherGeek

+0

@ user3471718我必須說你是對的 - 只有兩個項目,只根據他們的數字來判斷運動是正確的還是左的。 – Romasz

1

除了使用Items.Count的,你可以paramater e EventArgs的確定樞紐項目集合中的最後一個索引,並通過使用下列選定的指標:

 private void pivot_SelectionChanged(object sender, SelectionChangedEventArgs e) 
    { 
     // Casting e.AddedItems and e.RemovedItems to the PivotItem type to get 
     // the Selected Pivot and the Last Selected Pivot 

     var selectedPivot = (PivotItem) e.AddedItems[0]; 
     var lastPivot = (PivotItem) e.RemovedItems[0]; 

     // Getting indices using the ItemCollection of the pivot 

     int selectedIndex = pivot.Items.IndexOf(selectedPivot); 
     int previousIndex = pivot.Items.IndexOf(lastPivot); 

     if (selectedIndex < previousIndex) 
     { 
      // user swiped to the right 
     } 
     else 
     { 
      // user swiped to the left 
     } 

    } 

這會幫助你,即使你有隻有兩個支點。

0

不錯,所有的工作,但我們會做什麼,當我們點擊一​​個按鈕向前導航和背面的PivotItems。

所以,只需將下面的代碼放入兩個按鈕即向前和向後。 你可以很容易地通過設置Pivot.SelectedIndex

向前

if(pivotName.SelectedIndex < (pivotName.Items.Count - 1)) 
    pivotName.SelectedIndex++; 
    else 
    pivotName.SelectedIndex = 0; 

爲了向後

if(pivotName.S electedIndex > 0) 
    pivotName.SelectedIndex--; 
    else 
    pivotName.SelectedIndex = pivotName.Items.Count - 1;