在mouseover上获取控件的类型

问题描述:

我想获得鼠标悬停控件的类型。请帮助在mouseover上获取控件的类型

+0

我们需要更多的细节。没有鼠标悬停事件,因此您要参考哪个实际事件? MouseMove或MouseEnter?期望将相同的事件处理程序附加到不同类型的多个控件,并且您想确定哪种类型正在触发?或者您是否期望将冒泡事件的处理程序附加到某个父容器? – AnthonyWJones 2010-02-18 12:29:25

你可以得到UIElement的类型在其上鼠标当前正在使用MouseMove事件移动。由于这是冒泡事件,因此您可以将处理程序附加到容器(如Canvas)。

鼠标当前移动的UIElement可以从MouseEventArgsOriginalSource属性获得。

因此,以确定在该鼠标移动,你可以使用这样的代码类型: -

void Canvas_MouseMove(object sender, MouseEventArgs e) 
{ 

    Type currentType = e.OriginalSource.GetType(); 
    // Make decisions based on value of currentType here 
} 

但是你需要小心,MouseMove事件频繁触发用户移动鼠标,所以你可能要延迟任何繁重的工作,直到最后一次鼠标移动后有一段时间。

不幸的是没有事件发生鼠标。

另一种替代方法是将相同的MouseEnter处理程序附加到您添加到Canvas的每个子UIElement。在这种情况下,您可以使用sender而不是e.OriginalSource。如果从Canvas中删除元素,则必须小心删除该处理程序,否则可以创建看起来像是内存泄漏的内容。

mouse_enter事件添加到控件。

你可以用一行代码的类型遵循

var x = sender.GetType(); 

然后,您可以使用类似的比较吧:

if (x.Equals(typeof(TreeView))) 
+0

感谢回复Johannes 但是我的容器中有多个控件,比如说Ellipse,Rectangle,TextBlock等等,我应该可以在一个函数中获得类型 – Sathish 2010-02-18 12:20:48