日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > asp.net >内容正文

asp.net

WPF触屏Touch事件在嵌套控件中的响应问题

發布時間:2023/12/31 asp.net 43 豆豆
生活随笔 收集整理的這篇文章主要介紹了 WPF触屏Touch事件在嵌套控件中的响应问题 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

前幾天遇到個touch事件的坑,記錄下來以增強理解。

具體是 想把一個listview嵌套到另一個listview,這時候如果list view(子listview)的內容過多超過容器高度,它是不會出現滾動條壓縮內容區域的,反而會將滾動區域轉移到外面的list view(父listview),這個無可爭議,但這個問題開始沒留意,為待會的坑埋下伏筆。

因為?然后就是設置鼠標滾輪。

首先我使用了MouseWheel事件,奇怪的是它明明是個路由事件,然而listview似乎做了處理,沒有冒泡到父級。

于是我改寫PreviewMouseWheel事件,吧從父級傳過來的時間再冒泡回去。

在子類的listview中,我在滾動事件里寫了個向上傳遞的觸發事件:

? private void BodyList_PreviewMouseWheel(object sender, MouseWheelEventArgs e){var eventArg = new MouseWheelEventArgs(e.MouseDevice, e.Timestamp, e.Delta);eventArg.RoutedEvent = UIElement.MouseWheelEvent;eventArg.Source = sender;BodyList.RaiseEvent(eventArg);}

?

這樣我就能實現當鼠標焦點在子listview時,能觸發父級的滾動事件

這時候為了觸摸屏操作,我如是寫了touchdown .touchmove touchup 三個事件,可是,當手勢在子listview做滑動操作的時候,父級不滑動。

即使我完全偽造一個source為上級的touch事件,父級仍然巋然不動,如圖:

private void UIElement_OnTouchMove(object sender, TouchEventArgs e){var eventArg = new TouchEventArgs(e.TouchDevice,e.Timestamp);eventArg.RoutedEvent = UIElement.TouchMoveEvent;eventArg.Source = HAHAListBox;(sender as UIElement).TryFindParent<ListBox>().RaiseEvent(e);e.Handled = true;}

?

?

?

于是我開始找原因,touch事件同樣是路由事件,于MouseWheel不同的是,我可以在父listview觸發它。

那么是什么原因呢,通過可視化樹工具,可以發現,在嵌套的listview中實際上嵌套了兩個scrollview,?當touch事件在 子listview中觸發時,實際上事件被子級中的scrollview吸收了。但是為何偽造后仍然無法反應?

那是由于touch事件是一個特殊的事件,至少有別于滾輪事件,控件需要對手勢在觸摸屏上的坐標做出響應,兩個相互嵌套的滑動控件,無法對同一手勢坐標做出反應,否則他們之間的相對位置就會發生改變,也就是說兩個scrollview不能同時依賴一個手勢源,只有最上層的scrollview才能響應目標源。

不知道微軟為何這么設定,至少我的理解是這樣的

由于開始的設置,子listview中的scrollview永遠不會有效果。因此容易被忽略

所以我們只要重寫底層listview的template就好了,把原來包裹ItemsPresenter的Scrollview控件給刪掉

touch事件就能被父一級的listview觸發了!

?

希望這個繞坑的經歷能幫助到大家,謝謝!

轉載于:https://www.cnblogs.com/jevonsflash/p/6774358.html

總結

以上是生活随笔為你收集整理的WPF触屏Touch事件在嵌套控件中的响应问题的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。