2012-09-28 29 views
15

Tôi có đoạn mã sau:Xử lý Swipe lên, vuốt xuống, vuốt sang trái & Swipe Ngay Cử chỉ trong một ứng dụng WinRT

public MainPage() 
{ 
    this.InitializeComponent(); 
    this.ManipulationStarting += MainPage_ManipulationStarting; 
    this.ManipulationStarted += MainPage_ManipulationStarted; 
    this.ManipulationInertiaStarting += MainPage_ManipulationInertiaStarting; 
    this.ManipulationDelta += MainPage_ManipulationDelta; 
    this.ManipulationCompleted += MainPage_ManipulationCompleted; 
} 
void MainPage_ManipulationStarting(object sender, ManipulationStartingRoutedEventArgs e) 
{ 
    Debug.WriteLine("MainPage_ManipulationStarting"); 
} 
void MainPage_ManipulationStarted(object sender, ManipulationStartedRoutedEventArgs e) 
{ 
    Debug.WriteLine("MainPage_ManipulationStarted"); 
} 
void MainPage_ManipulationInertiaStarting(object sender, ManipulationInertiaStartingRoutedEventArgs e) 
{ 
    Debug.WriteLine("MainPage_ManipulationInertiaStarting"); 
} 
void MainPage_ManipulationDelta(object sender, ManipulationDeltaRoutedEventArgs e) 
{ 
    Debug.WriteLine("MainPage_ManipulationDelta"); 
} 
void MainPage_ManipulationCompleted(object sender, ManipulationCompletedRoutedEventArgs e) 
{ 
    Debug.WriteLine("MainPage_ManipulationCompleted"); 
} 

Nhưng tôi không có ý tưởng về cách sử dụng các sự kiện Manipulation. Bạn có thể mô tả cách xử lý các cử chỉ vuốt lên, xuống, trái và phải không?

+1

Tôi chưa từng làm việc với các cử chỉ WinRT, nhưng nhanh chóng nhìn vào MSDN tôi sẽ cược rằng bạn có thể truy cập các thuộc tính khác nhau của các đối số trong các sự kiện 'Delta' (hoặc khác). Ví dụ 'ManipulationDeltaRoutedEventArgs.Velocities' có một tập hợp dữ liệu liên quan đến đầu vào hướng/góc/tỷ lệ từ người dùng. Tôi không thể nói nếu đó là "một" bạn nên nhìn vào, nhưng có lẽ nó sẽ cho bạn một sự khởi đầu. –

Trả lời

21

Sự kiện thao tác cung cấp cho bạn các giá trị dịch. Delta thao tác sẽ cháy liên tục cho đến khi thao tác của bạn hoàn thành cùng với quán tính. Trong sự kiện này kiểm tra xem di chuyển có quán tính hay không, (một động tác bình thường không được coi là vuốt) và phát hiện sự khác biệt giữa vị trí ban đầu và vị trí hiện tại.

Sau khi đạt đến ngưỡng, hãy vuốt sự kiện vuốt lên/xuống/trái/phải. Và dừng thao tác ngay lập tức để tránh bắn cùng một sự kiện một lần nữa và một lần nữa.

mã sau đây sẽ giúp bạn,

private Point initialpoint; 

    private void Grid_ManipulationStarted_1(object sender, ManipulationStartedRoutedEventArgs e) 
    { 
     initialpoint = e.Position; 
    } 

    private void Grid_ManipulationDelta_1(object sender, ManipulationDeltaRoutedEventArgs e) 
    { 
     if (e.IsInertial) 
     { 
      Point currentpoint = e.Position; 
      if (currentpoint.X - initialpoint.X >= 500)//500 is the threshold value, where you want to trigger the swipe right event 
      { 
       System.Diagnostics.Debug.WriteLine("Swipe Right"); 
       e.Complete(); 
      } 
     } 
    } 
+3

Không cần nhiều sự kiện. Chỉ cần sử dụng 'e.Cumulative.Translation.X'. –

4

Tôi đã thử các câu trả lời bằng XAML người yêu, nhưng nó đã không phải là chính xác cho tôi (IsIntertial luôn trở lại sai đối với tôi). Tôi thực hiện một cái gì đó khác nhau (tôi đã trả lời một bài viết trước đây của một chủ đề liên quan ở đây Handling Swipe Guesture in Windows 8 Grid) cho bất cứ ai muốn thử một cái gì đó khác nhau.

Các vấn đề liên quan