2012-01-15 14 views
6

Đối với kịch bản cơ bản được mô tả in the msdn overview (under Touch and Manipulation) TouchEnter và TouchLeave được kích hoạt cho mọi TouchDown tương ứng và TouchUp tương ứng. Không giống như chuột, Touch và Stylus không bị ràng buộc để duy trì liên lạc với màn hình.Chiến lược phân biệt TouchUp từ TouchLeave và TouchDown từ TouchEnter?

Có cách nào để sử dụng TouchEnter và TouchLeave là chỉ chụp khi ngón tay là được kéo vào UIElement. Khi những sự kiện này được kích hoạt cho mọi touchUp và touchDown, cách tốt nhất để phân biệt các sự kiện này là gì?

Một chiến lược hoạt động đối với trường hợp ngón tay đơn lẻ là đặt cờ trên TouchDown và kiểm tra xem cờ có được đặt trên TouchUp hay không. Điều này cho phép kiểm tra một số điều kiện trên TouchUp. Tuy nhiên, đối với nhiều ngón tay, nó không khả thi.

Không có các sự kiện PreviewTouchEnter và PreviewTouchLeave được kích hoạt, chỉ có PreviewTouchDown và PreviewTouchUp. Chuỗi các sự kiện cho một ngón tay hạ xuống vào một UIElement và sau đó nâng lên trên nó là như sau:

  1. TouchEnter
  2. PreviewTouchDown
  3. Touchdown
  4. PreviewTouchUp
  5. TouchUp
  6. TouchLeave

Chuỗi này không giúp phân biệt một Touc hEnter đã xảy ra do một ngón tay kéo trên màn hình vào UIElement, từ một ngón tay được hạ xuống trực tiếp UIElement. Tôi có thiếu một cái gì đó, hay không khuôn khổ không hỗ trợ sự khác biệt như vậy chính nó?

Trả lời

0

Bạn có thể sử dụng lớp TouchDevice để theo dõi vị trí chạm được tạo ra hay không. Các điểm mới được cấp một ID mới, vì vậy bạn có thể phân biệt giữa các điểm chạm hiện có và các điểm mới và các yếu tố nào đang chụp thiết bị. Tôi đoán rằng phá vỡ các sự kiện Thao tác và các quá trình bình thường, nhưng tôi hy vọng rằng sẽ giúp.

0

Nếu bạn lấy một TouchPoint cho sự kiện này, có một tài sản trên nó tên Action mà nói với bạn cho dù đó là một Down, một Move hoặc một sự kiện Up.

void m_element_TouchEnter(object sender, System.Windows.Input.TouchEventArgs e) 
{ 
    var touchPoint = e.GetTouchPoint(m_someElement); 

    if (touchPoint.Action == System.Windows.Input.TouchAction.Move) 
    { 
     //This is a "true" TouchEnter event 
    } 
    else if (touchPoint.Action == System.Windows.Input.TouchAction.Down) 
    { 
     //This is a "true" TouchDown event. 
    } 
} 
Các vấn đề liên quan