前言:上次做了數據驅動UI雖然已經實現,但是在明細中鼠標滾動並不能帶動外部 DataGrid 滾動條滾動,上文地址 https://www.cnblogs.com/luguangguang/p/14925663.html#4895983
如圖所示
首先,我想到的是如果按照 冒泡路由事件 ,那么直接滾動明細表的話,應該也會通知到 DataGrid 的滾動條,但為什么事實不是這樣呢。
這里我在明細中添加 MouseWheel 事件
然而運行之后,發現該事件並沒有捕捉到。
聯想到最常見的 MouseDwon 事件不觸發的官方說明文檔
一般來說,MouseDown 通常會被 Click 事件直接標記為已執行。同理,MouseWheel 也應該是在 DataGrid 中被其他元素的事件標記處理了,這里就不做更深入探索了。
知道了問題所在,那么解決問題的方法也就很簡單了。
思路如下,采用明細的隧道事件來通知到DataGird的鼠標滾動事件。
滾動隧道事件代碼如下
1 private void DataGrid_PreviewMouseWheel(object sender, MouseWheelEventArgs e) 2 { 3 var eventArg = new MouseWheelEventArgs(e.MouseDevice, e.Timestamp, e.Delta); 4 eventArg.RoutedEvent = UIElement.MouseWheelEvent; 5 eventArg.Source = sender; 6 (sender as DataGrid).RaiseEvent(eventArg); 7 }
UI的部分代碼如下
來看最終效果
實現了最初的構想。
翻譯 朗讀 復制 正在查詢,請稍候…… 重試 朗讀 復制 復制 朗讀 復制 via 百度翻譯 譯