彩票走势图

WPF 检查滑鼠有没有点到物件

转帖|其它|编辑:郝浩|2011-03-09 13:11:11.000|阅读 889 次

概述:在WPF中,XAML的树状的结构,主要分成两种。一种是LogicalTree,简单的说就是讯息传递的路径;另一种是VisualTree,就是我们视觉上的物件阶层。会遇到这个主题,是因为我的WPF AP有一个DataGrid,并且有滑鼠右键选单的功能,不过我希望滑鼠右键在有资料的ROW上面点选和单纯DataGrid背景点选时出现的Menu是不同的,所以我必须知道点下去的时候点到了哪个东西,进而找到了这个主题。

# 慧都年终大促·界面/图表报表/文档/IDE等千款热门软控件火热促销中 >>

  在WPF中,XAML的树状的结构,主要分成两种。一种是LogicalTree,简单的说就是讯息传递的路径;另一种是VisualTree,就是我们视觉上的物件阶层。会遇到这个主题,是因为我的WPF AP有一个DataGrid,并且有滑鼠右键选单的功能,不过我希望滑鼠右键在有资料的ROW上面点选和单纯DataGrid背景点选时出现的Menu是不同的,所以我必须知道点下去的时候点到了哪个东西,进而找到了这个主题。

 在Row上点右键

没有在Row上点右键

先简单介绍InputHitTest

  先简单介绍InputHitTest

  他定义在UIElement中,回传IInputElement介面

  主要功能是依据传入的座标取得此座标下的物件

  而传入的座标是相对于唿叫此方法的物件

  再来会用到VisualTreeHelper.GetParent这个方法

  他会依据视觉树找到传入物件的上层物件

  因此,要完成检查滑鼠是不是有点到ROW

  只要不断往上找,看有没有找到DataGridRow

  如果已经找到DataGrid了却还没遇到DataGridRow,那就表示没有点在ROW上

  程式码像是这样:

1: private void ClearSelect(object obj) {
2: System.Windows.Controls.DataGrid dg = obj as System.Windows.Controls.DataGrid;
3: System.Windows.IInputElement element = dg.InputHitTest(Mouse.GetPosition(dg));
4: while (element != dg) {
5: if (element != null && element is System.Windows.Controls.DataGridRow) {
6: //有點到資料,看要做甚麼
7: return;
8: } else {
9: element = System.Windows.Media.VisualTreeHelper.GetParent(element as System.Windows.DependencyObject) as System.Windows.IInputElement;
10: }
11: }
12: //沒點到資料,看要做甚麼
13: }
14:


标签:

本站文章除注明转载外,均为本站原创或翻译。欢迎任何形式的转载,但请务必注明出处、不得修改原文相关链接,如果存在内容上的异议请邮件反馈至chenjj@pclwef.cn

文章转载自:网络转载

为你推荐

  • 推荐视频
  • 推荐活动
  • 推荐产品
  • 推荐文章
  • 慧都慧问
扫码咨询


添加微信 立即咨询

电话咨询

客服热线
023-68661681

TOP