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

Set event tunneling default on every control

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

event.Handled = true;

在我的主机上并阻止事件到达它的源(模块化内容)?因此,无论内容如何,​​我总是希望事件被隧道化而不是冒泡。

这是我为了展示我的需求而制作的简单草图

也许有 "better" 方法可以做到这一点。如果是,请分享您的想法。

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

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

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