McG*_*gle 5 .net c# silverlight mouseevent routed-events
该的UIElement类定义的静态RoutedEvent成员MouseLeftButtonDownEvent和MouseLeftButtonUpEvent-但没有MouseMoveEvent.据我所知,框架层次结构中的任何类都没有.有常规事件定义:
public event MouseEventHandler MouseMove;
Run Code Online (Sandbox Code Playgroud)
所以你可以写:
void AttachHandler(UIElement element)
{
element.MouseMove += OnMouseMove;
}
Run Code Online (Sandbox Code Playgroud)
但是你不能使用另一种形式,它允许你订阅甚至处理过的事件:
void AttachHandler(UIElement element)
{
element.AddHandler(UIElement.MouseMoveEvent, new MouseEventHandler(OnMouseMove), true);
}
Run Code Online (Sandbox Code Playgroud)
所以我的问题是双重的:
MouseMoveEvent定义任何地方?编辑
我看到MSDN文档承认这是一个限制:
此技术的局限性在于AddHandler API采用RoutedEvent类型的参数来标识所讨论的路由事件.并非所有Silverlight路由事件都提供RoutedEvent标识符,因此这种考虑会影响在Handled案例中仍可处理哪些路由事件.
编辑#2
根据@HansPassant,一般的答案是"MouseMove"事件不能被标记为"已处理",因此它们总是冒泡.除了明显的边缘情况之外,TextBox也是如此:当您单击TextBox的文本区域,从而激活拖动到选择的东西时,"MouseMove"事件不再被触发.我不知道为什么会这样.
注意 - 对于任何好奇的人 - 我正在尝试编写一个允许用户拖放TextBox的行为.TextBox控件默认拦截鼠标事件,以允许文本选择.