2013-03-17 13 views
5

Tôi có Canvas, với một điều khiển con. Các điều khiển con nhận được tất cả các sự kiện PreviewTouchDown và PreviewTouchUp tốt - nhưng sau khi bật Thao tác (IsManipulationEnabled = true) trên Canvas, chỉ các sự kiện "xuống" mới được kích hoạt đối tượng con, nhưng các sự kiện TouchUp và PreviewTouchUp không kích hoạt.WPF TouchUp không kích hoạt khi thao tác cha mẹ được bật

Bất kỳ ý tưởng gì đang xảy ra ở đây?

Trả lời

3

Bạn cũng cần đặt IsManipulationEnabled thành true trên phần tử con.


Mối quan hệ giữa cảm ứng và thao tác các sự kiện được giải thích trong Input Overview/Touch and Manipulation, phần Mối quan hệ giữa Touch và Manipulation Sự kiện:

Một UIElement luôn có thể nhận các sự kiện liên lạc. Khi thuộc tính IsManipulationEnabled được đặt thành true, UIElement có thể nhận được cả sự kiện chạm và thao tác. Nếu sự kiện TouchDown không được xử lý (nghĩa là, thuộc tính Xử lý là sai), thao tác logic nắm bắt liên lạc với phần tử và tạo các thao tác sự kiện. Nếu thuộc tính Handled được đặt thành true trong sự kiện TouchDown, thì logic thao tác không tạo ra các sự kiện thao tác. Hình minh họa sau minh họa mối quan hệ giữa các sự kiện liên lạc và các sự kiện thao tác .

Touch và thao tác các sự kiện

Touch and manipulation events

+0

Vì vậy, không có tùy chọn để có được cả hai? – Jaska

+0

Chỉ tìm thấy một số mã của riêng tôi, nơi tôi gọi thủ công 'CaptureTouch' từ trình xử lý' PreviewTouchDown' cũng đặt 'Handled = true'. Và cũng có một trình xử lý 'PreviewTouchUp'. Thật không may tôi không thể kiểm tra nó ngay bây giờ, nhưng tôi sẽ cho nó một thử vào ngày mai. – Clemens

+0

OK, Tuyệt vời nếu bạn có thể làm điều đó .. nhưng đừng bận tâm nếu nó quá phiền hà, như tôi đã đổ toàn bộ ý tưởng sử dụng thao tác và quyết định tính toán tỷ lệ và xoay bản thân mình trong touchmove -event. – Jaska

2

Tôi biết nó một tuổi, nhưng điều này có thể giúp ai đó: Để khắc phục, bạn có thể chụp "Stylus tap" sự kiện chỉ tốt nếu phụ huynh phần tử có IsManipulationEnabled = true

.... 

MyChildElement.StylusSystemGesture += MyChildElement_StylusSystemGesture; 

.... 

void MyChildElement_StylusSystemGesture(object sender, StylusSystemGestureEventArgs e) 
    { 
     if (e.SystemGesture == SystemGesture.Tap) 
      //Do something 
    } 
+0

Và một năm sau đó, bạn đã cứu được sự tỉnh táo của mình! Cuối cùng, tôi có thể phát hiện "nhấp chuột" trên một yếu tố có các thao tác được bật trên đó. Một nút kèm theo thậm chí sẽ không phát hiện một cú nhấp chuột, nhưng thao tác bút trỏ hoạt động. – ulatekh