zoukankan      html  css  js  c++  java
  • [WPF]获取鼠标指针下的元素

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

                                                            周银辉

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

    今天看到Mouse类居然有一个DirectlyOver属性,可以获得鼠标下的元素, 很奇怪,我的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);
            }

  • 相关阅读:
    Alink漫谈(五) : 迭代计算和Superstep
    Alink漫谈(四) : 模型的来龙去脉
    Elasticsearch索引模板-转载
    Filebeat配置文件解析-转载
    Logtash 配置文件解析-转载
    Logtash遇到的异常和注意点
    Linux中Sshd服务配置文件优化版本(/etc/ssh/sshd_config)
    运维应急方案撰写-草稿版分享
    du和df的统计结果为什么会不一样?
    全网最详细的Linux命令系列-Screen远程会话命令
  • 原文地址:https://www.cnblogs.com/zhouyinhui/p/1786775.html
Copyright © 2011-2022 走看看