您可以在 .NET(Silverlight 和 ASP.NET)中定义全局点击事件处理程序吗?

Can you define a global click event handler in .NET (Silverlight and ASP.NET)?

作为这个问题 () 的后续问题,是否有任何全局方法可以在 Silverlight 或 ASP.NET 中捕获所有点击事件?

我基本上是在询问是否有某种方法可以附加一个全局点击事件处理程序,这样我就可以 运行 针对所有处理点击事件的控件捕获的每个点击事件的一些代码,而不必添加为每个控件手动处理事件。

如果可以的话,我想知道如何在不必手动向每个控件显式添加事件处理程序的情况下完成此操作。我的一个想法是从顶部 ASP.NET 页面或 Silverlight 应用程序遍历整个控件树以查找 ButtonBase 控件(或 ASP.NET 中的等效控件)并为单击事件添加一个新的事件处理程序。但是,我不喜欢遍历整棵树并以这种方式进行的想法。我想在 Silverlight 中它不会那么糟糕,因为它只需要在应用程序加载时完成,但是使用 ASP.NET 我想它会在每个 PostBack 上发生?

看起来像 System.Windows.EventManager.RegisterClassHandler() 可以做到,但我不相信我可以在 Silverlight 或 ASP.NET.

中的任何等效项中访问它

在 Silverlight 中,您可以将 mouseClick 事件处理程序附加到 UI 树 RootElement。您不需要遍历树,mouseclick 事件会在整个树中冒泡 - 即使它们由中间节点处理。如果你还想捕获已经处理的事件,你必须在附加处理程序时指定它(请参阅下面我的代码中的 bool 参数)。

...
var root = System.Windows.Application.Current.RootVisual;
MouseButtonEventHandler handler = HandleRootMouseLeftButtonDown;
root.AddHandler(UIElement.MouseLeftButtonDownEvent, handler, true);
...
private void HandleRootMouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
    // do some magic...
}