在每个控件上设置事件隧道默认设置

问题描述:

我打算开发一个模块化内容的应用程序。任何模块化内容只是一个自定义用户控件。该应用程序还需要有可能禁用任何用户输入,如点击事件。是否有可能设置的事件隧道为默认,所以我可以做在每个控件上设置事件隧道默认设置

event.Handled = true; 
我的主机上

,防止事件到达它的源代码(模块化内容)?因此,不管内容如何,​​我总是希望事件能够通过隧道而不是冒泡。

这里有一个简单的素描时,我提出来证明我的需求Basic application sketch

也许有一个“更好”的方式来做到这一点。如果是这样,请分享您的想法。

+0

看到这个问题的一些想法: http://stackoverflow.com/questions/634434/add-listener-for-all-element-events-in-wpf –

如果我理解正确的话,你可以处理主机窗口的PreviewMouseLeftButtonDown事件并设置MouseButtonEventArgs.Handled属性为true,以防止隧道路由事件到模块化内容:

public partial class HostWindow : Window 
{ 
    public HostWindow() 
    { 
     InitializeComponent(); 
     PreviewMouseLeftButtonDown += (s, e) => e.Handled = true; 
    } 
} 

这应该有效地禁用UserControl中的左键鼠标输入。还有其他几个预览*事件:https://msdn.microsoft.com/en-us/library/ms752279(v=vs.110).aspx