WPF:如何使自定义模式对话框闪烁?

通常,当您打开modal dialog并尝试单击它的父窗口时,modal dialog的标题栏会闪烁。 在WPF中创建自定义,无边框,无边框的窗口时,您将失去所有这些function,并且必须自己重建它。 我看起来高低,因为我的生活无法弄清楚如何让我的模态窗口闪烁。 虽然它仍然会发出哔哔声……

我想我将不得不在WndProc中观察一些我必须处理的事件,但我无法弄清楚哪个事件或如何做到这一点。 我已经尝试观察窗口更改和窗口更改事件以及WM_ACTIVATE事件无济于事。 我确定我只是遗漏了一些简单的东西,但我会很感激你的帮助。 谢谢!

private IntPtr WndProc(IntPtr hwnd, int msg, IntPtr wParam, IntPtr lParam, ref bool handled) { var retVal = IntPtr.Zero; switch (msg) { case UnsafeNativeConstants.WM_NCACTIVATE: retVal = UnsafeNativeMethods.DefWindowProc(hwnd, UnsafeNativeConstants.WM_NCACTIVATE, new IntPtr(1), new IntPtr(-1)); AssociatedObject.UpdateTitlebar((int)wParam == 1 ? true : false); handled = true; break; } return retVal; } 

WndProc我已经连接到我的窗口附加的自定义行为。 它在我的窗口上调用一个内部方法,它将适当地更新Titlebar的颜色。

感谢@Hans Passant指出我正确的方向。

如果你没有找到你想要的东西,有一个解决方法,根本不涉及使用模态窗口。

以下是您可以这样做的方法:

  1. 创建一个名为MainContentUC的用户控件,并将MainWindow的内容放入其中
  2. 创建另一个名为MessageBoxUC的用户控件,并将消息框的内容放入其中

                   
  3. 在名为IsOpen的MessageBoxUC中添加一个布尔依赖项属性(默认值= false)

  4. 写下主窗口的xaml代码如下:

           

这样,当MessageBoxUC打开时,它将阻止单击MainContentsUC。 当你点击后面的区域(颜色设置为#4FFF)时,触发器会运行故事板并闪烁。

如果你有几个窗口,你可以实现不同的控制模板,并使用模板选择器在它们之间进行选择。 所以你将拥有而不是