在每个控件上设置事件隧道默认设置
问题描述:
我打算开发一个模块化内容的应用程序。任何模块化内容只是一个自定义用户控件。该应用程序还需要有可能禁用任何用户输入,如点击事件。是否有可能设置的事件隧道为默认,所以我可以做在每个控件上设置事件隧道默认设置
event.Handled = true;
我的主机上
,防止事件到达它的源代码(模块化内容)?因此,不管内容如何,我总是希望事件能够通过隧道而不是冒泡。
也许有一个“更好”的方式来做到这一点。如果是这样,请分享您的想法。
答
如果我理解正确的话,你可以处理主机窗口的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
看到这个问题的一些想法: http://stackoverflow.com/questions/634434/add-listener-for-all-element-events-in-wpf –