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



作为此问题的后续内容(https://stackoverflow.com/questions/28567211/how-to-log-control-hierarchy-in-net),是否有任何全局方法可以在Silverlight或ASP.NET中捕获所有单击事件?

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

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

它看起来像System.Windows.EventManager.RegisterClassHandler()可以做到这一点,但我认为我在Silverlight或ASP.NET中没有访问权限。

在Silverlight中,您可以将mouseClick事件处理程序附加到UI树RootElement。您不需要遍历树,鼠标单击事件会弹出整个树,即使它们是由中间节点处理的。如果您还想捕获已经处理的事件,则必须在附加处理程序时指定此参数(请参阅下面代码中的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...
}

相关内容

  • 没有找到相关文章