WPF DataGrid RowDetailsTemplate 鼠标滚动通知到 DataGrid 滚动

前言:上次做了数据驱动UI虽然已经实现,但是在明细中鼠标滚动并不能带动外部 DataGrid 滚动条滚动,上文地址  //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 百度翻译

Tags: