为什么我的Silverlight UI元素没有预览事件?

时间:2010-04-27 16:40:58

标签: silverlight events routing preview uielement

我正在构建一个自定义的Silverlight UserControl,需要使用预览/隧道来监听事件,但由于某种原因,编译器告诉我它们无法被识别或访问。

例如,我可以向MouseLeftButtonDown添加事件处理程序,但不能PreviewMouseLeftButtonDown。这没有意义,因为根据Microsoft(http://msdn.microsoft.com/en-us/library/system.windows.uielement_members(v=VS.100).aspx)所有UIElemen ts应该附加预览事件。

有关为何发生这种情况的任何想法?我正在使用Visual Studio 2010试用版,Blend 4 RC和.Net 4,如果这有所不同。

2 个答案:

答案 0 :(得分:3)

Silverlight不支持预览事件,也不支持路由事件(冒泡/隧道),除了一些核心事件。

如果您尝试创建适用于WPF和Silverlight的控件,则需要采用不同的方法。根据您要执行的操作,您可以通过在代码中绑定处理程序并指定您希望处理事件来完成您想要的任务。

// the last parameter indicates we want to receive events that
// were marked as e.Handled = true by other listeners
// this type of event handler can only be done in code
myUserControl.AddHandler(
    UIElement.MouseLeftButtonDownEvent,
    OnMouseLeftButtonDown,
    true
);

答案 1 :(得分:1)

你正在寻找WPF的帮助,而不是Silverlight。 Silverlight(大部分)是WPF的一个子集,并且缺少大部分功能。

Silverlight UIElement help未显示这些事件,因为它们在Silverlight中不存在。