在mouseover上获取控件的类型
答
你可以得到UIElement的类型在其上鼠标当前正在使用MouseMove
事件移动。由于这是冒泡事件,因此您可以将处理程序附加到容器(如Canvas)。
鼠标当前移动的UIElement可以从MouseEventArgs
OriginalSource
属性获得。
因此,以确定在该鼠标移动,你可以使用这样的代码类型: -
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
我们需要更多的细节。没有鼠标悬停事件,因此您要参考哪个实际事件? MouseMove或MouseEnter?期望将相同的事件处理程序附加到不同类型的多个控件,并且您想确定哪种类型正在触发?或者您是否期望将冒泡事件的处理程序附加到某个父容器? – AnthonyWJones 2010-02-18 12:29:25