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