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

原文:[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);
        }

原文地址:https://www.cnblogs.com/lonelyxmas/p/9047044.html

时间: 2024-08-05 05:27:53

[WPF]获取鼠标指针下的元素的相关文章

WPF 获取鼠标屏幕位置、窗口位置、控件位置

原文:WPF 获取鼠标屏幕位置.窗口位置.控件位置 public struct POINT { public int X; public int Y; public POINT(int x, int y) { this.X = x; this.Y = y; } } [DllImport("user32.dll")] public static extern bool GetCursorPos(out POINT lpPoint); //e.GetPosition(this); //(e

鼠标指针被高层元素挡住时,触发下层元素的鼠标事件

在做如下图这种拖拽效果的时候,遇到一个问题: 被拖拽的元素一直位于一个比较高的层,且一直跟随鼠标移动,这样会挡住鼠标,导致其无法触发下层元素的任何事件.这样下层的元素就无法响应拖拽的事件了. 受到这篇文章的启发:http://www.vinylfox.com/forwarding-mouse-events-through-layers/ 最终实现的思路是,在mouseover事件中: 1.隐藏高层元素 2.根据坐标获取当前位置的最高层DOM 3.手动触发事件 element.hide(); va

CSS改网页鼠标指针、改指定元素指针(1)——代码部分

要实现CSS改网页鼠标指针.改指定元素指针,我们应该首先了解以下内容: 所有主流浏览器都支持 cursor 属性. 注释:Opera 9.3 和 Safari 3 不支持 url 值. 注释:任何版本的 Internet Explorer (包括 IE8)都不支持属性值 "inherit". 定义和用法 cursor 属性规定要显示的光标的类型(形状). 该属性定义了鼠标指针放在一个元素边界范围内时所用的光标形状(不过 CSS2.1 没有定义由哪个边界确定这个范围). 默认值: aut

鼠标指针定位解析及兼容性方法

当事件发生时,获取鼠标指针的位置是很重要的事件.这原本是一个很简单的问题,但是由于浏览器的不兼容性,给开发带来了挑战.不同浏览器分别在各自事件对象中定义了不同的属性,详见下方图表. 属性 说明 兼容性 clientX 以浏览器窗口左上顶角为原点,定位X轴坐标 所有浏览器,不兼容Safari clientY 以浏览器窗口左上顶角为原点,定位Y轴坐标 所有浏览器,不兼容Safari offsetX 以当前事件的目标对象左上顶角为原点,定位X轴坐标 所有浏览器,不兼容Mozilla offsetY 以

CSS中cursor 鼠标指针光标样式(形状)

在前端开发中,我们经常需要对对象鼠标指针光标进行控制,比如鼠标经过超链接时变成手指形状.在这里整理一下cursor鼠标指针光标样式的知识,记录与方便以后查找. 常用cursor光标 url 需使用的自定义光标的 URL. 注释:请在此列表的末端始终定义一种普通的光标,以防没有由 URL 定义的可用光标. default 默认光标(通常是一个箭头)auto 默认.浏览器设置的光标.crosshair 光标呈现为十字线.pointer 光标呈现为指示链接的指针(一只手)move 此光标指示某对象可被

用VBS控制鼠标(获取鼠标坐标、鼠标移动、鼠标单击、鼠标双击、鼠标右击)

Demon's Blog 忘记了,喜欢一个人的感觉 Demon's Blog  ?  程序设计  ?  用VBS控制鼠标(获取鼠标坐标.鼠标移动.鼠标单击.鼠标双击.鼠标右击) ? bbPress积分插件--Virtual Money VBS调用WMI监视注册表变动 ? 用VBS控制鼠标(获取鼠标坐标.鼠标移动.鼠标单击.鼠标双击.鼠标右击) 标题: 用VBS控制鼠标(获取鼠标坐标.鼠标移动.鼠标单击.鼠标双击.鼠标右击)作者: Demon链接: http://demon.tw/programm

CSS样式:cursor -----定义鼠标指针

定义和用法 cursor 属性规定要显示的光标的类型(形状). 该属性定义了鼠标指针放在一个元素边界范围内时所用的光标形状(不过 CSS2.1 没有定义由哪个边界确定这个范围). 可能的值: demo: <html> <head>     <style type="text/css">        span{               line-height: 30px;             }     </style>  <

CSS如何规定鼠标指针的形状

CSS如何规定鼠标指针的形状: 鼠标指针在不同元素黄总的形状,往往能够说明此元素的功能,通过cursor属性可以设置鼠标指针的形状. 罗列如下: auto:标准光标 default:标准箭头 hand:手形光标 wait:等待光标 text:I形光标 vertical-text:水平I形光标 no-drop:不可拖动光标 not-allowed:无效光标 help:?帮助光标 all-scroll:三角方向标 move:移动标 crosshair:十字标 原文地址是:http://www.51t

获取鼠标位置的几个通用的JS函数

原文:http://www.open-open.com/code/view/1421401009218 /*两个通用函数,用于获取鼠标相对于整个页面的当前位置*/ function getX(e) { e = e || window.event; return e.pageX || e.clientX + document.body.scrollLeft; } function getY(e) { e = e || window.event; return e.pageY || e.client