博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[WPF]获取鼠标指针下的元素
阅读量:5930 次
发布时间:2019-06-19

本文共 766 字,大约阅读时间需要 2 分钟。

原文:

                                             [WPF]获取鼠标指针下的元素

                                                        周银辉

以前写过一些GetElementUnderMouse之类的函数,要用到坐标换算而显得有些麻烦(特别是当元素有XXXTransform的时候)

今天看到Mouse类居然有一个属性,可以获得鼠标下的元素, 很奇怪,我的MSDN文档以及VS2008智能提示中都没有显示该属性,但反编译一下可以看到。

但必须注意到的一点是,WPF控件是由各个元素复合而成的,但Mouse类可不知道这概念,所以不要期望它为了返回一个Button,其很可能会返回Button的visualTree中的TextBlock等,所以,如果我们加上如下的方法就完美了:

        
public
 
static
 T FindVisualParent
<
T
>
(UIElement element) 
where
 T : UIElement
        {
            UIElement parent 
=
 element;
            
while
 (parent 
!=
 
null
)
            {
                var correctlyTyped 
=
 parent 
as
 T;
                
if
 (correctlyTyped 
!=
 
null
)
                {
                    
return
 correctlyTyped;
                }
                parent 
=
 VisualTreeHelper.GetParent(parent) 
as
 UIElement;
            }
            
return
 
null
;
        }

 

两者结合一下,我们的GetElementUnderMouse方法便可以如下书写:

        
public
 
static
 T GetElementUnderMouse
<
T
>
() 
where
 T: UIElement
        {
            
return
 FindVisualParent
<
T
>
(Mouse.DirectlyOver 
as
 UIElement);
        }

 

 

转载地址:http://xlktx.baihongyu.com/

你可能感兴趣的文章
重读金典------高质量C编程指南(林锐)-------第七章 内存管理
查看>>
99%的人连Where are you from都不会回答?
查看>>
性能测试学习路线图
查看>>
求素数
查看>>
jsp 获取ip
查看>>
向Word模板中填充数据
查看>>
RunLoop
查看>>
fcitx3.6.2 make error!error:(转)
查看>>
Eclipse CDT 配置C /C ++ 标准库 (UBUNTU 12 )
查看>>
木门工厂木门、门套、套线公式和算法
查看>>
C语言字符串操作总结大全
查看>>
PHP实现函数重载
查看>>
[leetcode-60-Permutation Sequence]
查看>>
day10
查看>>
汇编---2---寄存器
查看>>
[C] 判断目录 / 文件是否存在access()函数
查看>>
android中的broadcastReceiver
查看>>
日志收集系统-前奏
查看>>
apache php 60 503
查看>>
java - 线程1打印1-10,当线程打印到5后,线程2打印“hello”,然后线程1继续打印...
查看>>