在WPF中禁用页内对话框后面的内容

时间:2012-02-02 15:57:53

标签: wpf modal-dialog

我有一些简单的代码,用于在我的应用程序窗口的一部分上弹出一个“对话框”的东西。我们的想法是,用户必须先关闭对话框,然后才能继续使用该部分页面。

这是通过将一个大的半透明矩形悬停在应该被禁用的页面部分上来实现的 - 这足以阻止对该区域的点击。我认为你在WPF和Web应用程序中看到了很多这样的东西。

我遇到的问题是,用户仍然可以通过使用键盘对他们进行选项来触及所有那些多汁的阻止控件。 “没问题”,我听到你说,“只需将面板上的IsEnabled设置为false,从而阻止键盘访问”。

不幸的是,禁用控件:

  • 看起来不太好
  • 在树下进一步使用自定义样式和绑定会产生意想不到的后果

那么,有没有更好的方法来禁用页面的一部分,而不设置“IsEnabled”属性,这样它不会改变任何控件的视觉外观?

谢谢, 标记

2 个答案:

答案 0 :(得分:0)

您可以将“对话框”XAML放在弹出窗口中吗?然后,在窗口上调用ShowDialog()使其成为模态窗口?如果您不希望弹出窗口看起来像标准窗口,您可以始终将其删除以删除边框等。

答案 1 :(得分:0)

我通过从树中的父元素订阅PreviewGotKeyboardFocus事件,然后处理事件使焦点永远不会传递给子节点来解决这个问题。

此外,当然,我还必须明确地从“禁用”控件中删除焦点。