【WPF】ListBox嵌套与事件冒泡
生活随笔
收集整理的這篇文章主要介紹了
【WPF】ListBox嵌套与事件冒泡
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
【W(wǎng)PF】ListBox嵌套與事件冒泡 原文:【W(wǎng)PF】ListBox嵌套與事件冒泡
問題:兩個(gè)ListBox嵌套后,當(dāng)鼠標(biāo)位于內(nèi)部ListBox上,鼠標(biāo)滾輪事件會(huì)被內(nèi)部ListBox接收,導(dǎo)致外層ListBox不能用鼠標(biāo)滾輪滑動(dòng)!現(xiàn)在的需求是該事件要能給外部ListBox處理,即嵌套的ListBox應(yīng)該由外層ListBox來接收鼠標(biāo)滾輪事件。
<ListBox><ListBox><ListBox.ItemTemplate><DataTemplate> <!-- 省略 --></DataTemplate><ListBox.ItemTemplate></ListBox> </ListBox>思路:根據(jù)WPF的冒泡路由事件,鼠標(biāo)滾輪事件首先會(huì)被內(nèi)層的ListBox接收。此時(shí)該事件被攔截后直接將它標(biāo)記為已處理(不讓內(nèi)部ListBox的滾輪滑動(dòng)),然后再手動(dòng)激發(fā)一個(gè)鼠標(biāo)滾輪事件,該事件自動(dòng)向上冒泡就能被外層ListBox接收到。
給內(nèi)層ListBox注冊(cè)一個(gè)鼠標(biāo)滾輪事件。
<ListBox x:Name="innerLB" PreviewMouseWheel="innerLB_PreviewMouseWheel">后臺(tái)代碼處理該事件。
/// <summary> /// 問題:內(nèi)層的ListBox攔截了鼠標(biāo)滾輪事件,導(dǎo)致外層ListBox不能用鼠標(biāo)滾輪滑動(dòng)。 /// 辦法:內(nèi)層ListBox攔截鼠標(biāo)滾輪事件后,再手動(dòng)激發(fā)一個(gè)鼠標(biāo)滾輪事件,讓事件冒泡給外層ListBox接收到。 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void innerLB_PreviewMouseWheel(object sender, MouseWheelEventArgs e) {if (!e.Handled){// 內(nèi)層ListBox攔截鼠標(biāo)滾輪事件e.Handled = true;// 激發(fā)一個(gè)鼠標(biāo)滾輪事件,冒泡給外層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攔截滾輪滾動(dòng)事件
- WPF冒泡路由事件
轉(zhuǎn)載于:https://www.cnblogs.com/lonelyxmas/p/9628886.html
與50位技術(shù)專家面對(duì)面20年技術(shù)見證,附贈(zèng)技術(shù)全景圖總結(jié)
以上是生活随笔為你收集整理的【WPF】ListBox嵌套与事件冒泡的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 使用Apache搭建个人用户主页
- 下一篇: ASP.NET Core 登录登出 -