&引用;模态对话框;在WPF中-生成覆盖块关键事件

&引用;模态对话框;在WPF中-生成覆盖块关键事件,wpf,events,key,overlay,block,Wpf,Events,Key,Overlay,Block,我正在创建一个WPF应用程序,其中包含一个“主内容”层(包含TabControl)和一个“对话框”层(包含ItemsControl) XAML如下所示: <Grid> <TabControl> ..Some Tabs </TabControl> <ItemsControl> <ContentControl Content={Binding Dialog1Property} /> <Co

我正在创建一个WPF应用程序,其中包含一个“主内容”层(包含TabControl)和一个“对话框”层(包含ItemsControl)

XAML如下所示:

<Grid>
  <TabControl>
    ..Some Tabs
  </TabControl>

  <ItemsControl>
      <ContentControl Content={Binding Dialog1Property} />
      <ContentControl Content={Binding Dialog2Property} />
  </ItemsControl>
</Grid>

…一些标签
通常,“Dialog1Property”和“Dialog2Property”为空,这意味着ItemsControl不可见。每当我将一个控件指定给其中一个控件时,它就会显示在TabControl的前面,这正是我想要的。如果我将不透明度为0.7的灰色矩形指定给对话框属性之一,它将创建一个灰色覆盖

如果我单击该选项卡,它在覆盖中略微可见,则不会发生任何事情-矩形会阻止鼠标事件。但是,仍然可以使用Tab键将TabControl聚焦在覆盖后面,因此即使显示对话框,也可以切换选项卡

有没有一种简单的方法可以告诉矩形以某种方式阻止关键事件,就像它在鼠标点击时所做的那样

问候
BBRain

是的,在您的矩形上,订阅事件预览向下

<Rectangle Opacity="0.7" Fill="Green" PreviewKeyDown="Rectangle_PreviewKeyDown" />

由于前缀为“Preview…”的路由事件是隧道事件,因此矩形下的元素将不会接收输入。

是的,在矩形上,订阅事件PreviewKeyDown

<Rectangle Opacity="0.7" Fill="Green" PreviewKeyDown="Rectangle_PreviewKeyDown" />

由于前缀为“Preview…”的路由事件是隧道事件,因此矩形下的元素将不会接收输入。

如果触发PreviewKeyDown-事件,这可能会解决问题,但情况似乎并非如此。知道为什么吗?PreviewMouseDown-事件已正确激发。当然,这对我没有多大帮助,因为Mouseclicks被阻止了……我通过在XAML末尾使用一个文本框来规避这个问题。然后,我创建了一个DataTrigger,对该文本框的“IsFocus”属性的更改作出反应,在该文本框中,我通过FocusManager AttachedProperty将焦点设置为对话框中的第一个元素,因此焦点排序类似于对话框中的循环。无论如何,我都会接受你的答案,因为它听起来像是正确的解决方案,而且它在我的案例中不起作用的原因可能是与我的其他源代码相关的问题。如果触发PreviewKeyDown事件,这可能会解决问题,但事实似乎并非如此。知道为什么吗?PreviewMouseDown-事件已正确激发。当然,这对我没有多大帮助,因为Mouseclicks被阻止了……我通过在XAML末尾使用一个文本框来规避这个问题。然后,我创建了一个DataTrigger,对该文本框的“IsFocus”属性的更改作出反应,在该文本框中,我通过FocusManager AttachedProperty将焦点设置为对话框中的第一个元素,因此焦点排序类似于对话框中的循环。无论如何,我都会接受你的答案,因为它听起来像是正确的解决方案,而它在我的案例中不起作用的原因可能是与我的其他源代码相关的问题。