WPF中的“模态对话框” - 使叠加块键事件

时间:2012-03-06 10:23:44

标签: wpf events key overlay block

我正在创建一个包含“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

1 个答案:

答案 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;
        }

由于以“预览...”为前缀的路由事件是隧道,因此矩形下的元素将无法接收输入。