我正在创建一个包含“Main-Content”的WPF应用程序 - 包含TabControl和“Dialog”的图层 - 包含ItemsControl的图层。
XAML看起来像这样:
<Grid>
<TabControl>
..Some Tabs
</TabControl>
<ItemsControl>
<ContentControl Content={Binding Dialog1Property} />
<ContentControl Content={Binding Dialog2Property} />
</ItemsControl>
</Grid>
通常“Dialog1Property”和“Dialog2Property”为null,这意味着ItemsControl是不可见的。每当我将Control分配给其中一个时,它就会显示在TabControl前面,这正是我想要的。如果我将一个不透明度为0.7的灰色矩形指定给其中一个对话框 - 属性,则会创建一个灰色叠加层。
如果我点击通过叠加层略微可见的标签,则没有任何反应 - 矩形会阻止鼠标事件。但是,仍然可以使用Tab-Key将TabControl聚焦在叠加层后面,因此即使显示对话框也可以切换选项卡。
有没有一种简单的方法可以告诉矩形以某种方式阻止关键事件,就像Mouseclicks一样?
此致 BBRain
答案 0 :(得分:1)
是的,在你的Rectangle上,订阅事件PreviewKeyDown。
<Rectangle Opacity="0.7" Fill="Green" PreviewKeyDown="Rectangle_PreviewKeyDown" />
在其处理程序中,只需设置e.Handled = true;
private void Rectangle_PreviewKeyDown(object sender, KeyEventArgs e)
{
e.Handled = true;
}
由于以“预览...”为前缀的路由事件是隧道,因此矩形下的元素将无法接收输入。