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

歡迎訪問 生活随笔!

生活随笔

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

asp.net

【WPF】ListBox嵌套与事件冒泡

發(fā)布時間:2025/3/15 asp.net 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【WPF】ListBox嵌套与事件冒泡 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
【WPF】ListBox嵌套與事件冒泡 原文:【WPF】ListBox嵌套與事件冒泡

問題:兩個ListBox嵌套后,當鼠標位于內部ListBox上,鼠標滾輪事件會被內部ListBox接收,導致外層ListBox不能用鼠標滾輪滑動!現(xiàn)在的需求是該事件要能給外部ListBox處理,即嵌套的ListBox應該由外層ListBox來接收鼠標滾輪事件。

<ListBox><ListBox><ListBox.ItemTemplate><DataTemplate> <!-- 省略 --></DataTemplate><ListBox.ItemTemplate></ListBox> </ListBox>

思路:根據WPF的冒泡路由事件,鼠標滾輪事件首先會被內層的ListBox接收。此時該事件被攔截后直接將它標記為已處理(不讓內部ListBox的滾輪滑動),然后再手動激發(fā)一個鼠標滾輪事件,該事件自動向上冒泡就能被外層ListBox接收到。

給內層ListBox注冊一個鼠標滾輪事件。

<ListBox x:Name="innerLB" PreviewMouseWheel="innerLB_PreviewMouseWheel">

后臺代碼處理該事件。

/// <summary> /// 問題:內層的ListBox攔截了鼠標滾輪事件,導致外層ListBox不能用鼠標滾輪滑動。 /// 辦法:內層ListBox攔截鼠標滾輪事件后,再手動激發(fā)一個鼠標滾輪事件,讓事件冒泡給外層ListBox接收到。 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void innerLB_PreviewMouseWheel(object sender, MouseWheelEventArgs e) {if (!e.Handled){// 內層ListBox攔截鼠標滾輪事件e.Handled = true;// 激發(fā)一個鼠標滾輪事件,冒泡給外層ListBox接收到var eventArg = new MouseWheelEventArgs(e.MouseDevice, e.Timestamp, e.Delta);eventArg.RoutedEvent = UIElement.MouseWheelEvent;eventArg.Source = sender;var parent = ((Control)sender).Parent as UIElement;parent.RaiseEvent(eventArg);} }

?

參考:

  • ListBox攔截滾輪滾動事件
  • WPF冒泡路由事件
posted on 2018-09-11 17:06 NET未來之路 閱讀(...) 評論(...) 編輯 收藏

轉載于:https://www.cnblogs.com/lonelyxmas/p/9628886.html

與50位技術專家面對面20年技術見證,附贈技術全景圖

總結

以上是生活随笔為你收集整理的【WPF】ListBox嵌套与事件冒泡的全部內容,希望文章能夠幫你解決所遇到的問題。

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