前言:上次做了資料驅動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 百度翻譯