2

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

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

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

4

2 回答 2

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
);
于 2010-04-27T16:52:26.127 回答
1

您正在查看 WPF 的帮助,而不是 Silverlight。Silverlight (大部分)是 WPF 的一个子集,并且缺少许多功能。

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

于 2010-04-27T16:46:54.073 回答