WPF MessageBox窗口样式

如何将默认的Windows样式应用于WPF中的标准MessageBox

例如,当我执行下一个代码时:

 MessageBox.Show("Hello Stack Overflow!", "Test", MessageBoxButton.OKCancel, MessageBoxImage.Exclamation); 

我收到消息框:

在这里输入图像描述

但是在WinForms中,风格一切正常:

 MessageBox.Show("Hello Stack Overflow!", "Test", MessageBoxButtons.OKCancel, MessageBoxIcon.Exclamation); 

在这里输入图像描述

根据这个页面,WPF拿起了一些控件的旧样式。

为了摆脱它,你必须创build一个自定义的app.manifest文件(添加 – >新build项目 – >应用程序清单文件),并将下面的代码粘贴在它(紧跟/ trustInfo – 标签):

 <!-- Activate Windows Common Controls v6 usage (XP and Vista): --> <dependency> <dependentAssembly> <assemblyIdentity type="win32" name="Microsoft.Windows.Common-Controls" version="6.0.0.0" processorArchitecture="*" publicKeyToken="6595b64144ccf1df" language="*" /> </dependentAssembly> </dependency> 

然后你必须用这个app.manifest编译你的解决scheme(在项目属性 – >应用程序 – >指向“图标和清单”中的新清单)。

如果现在启动应用程序,它应该看起来像WinForms- MessageBox。

此外,对于WPF,我将使用具有WPF消息框的扩展WPF工具包来推荐

WinForms的工作原理是因为它的主要function是打开视觉样式(即使用Common Controls v6)。 如果您删除对System.Windows.Forms.Application.EnableVisualStyles()的调用,那么WinForms消息框将看起来就像WPF。

这不会发生在WPF应用程序,可能是因为所有的WPF控件都被渲染,所以不需要使用新版本的公共控件。

您可以尝试在WPF应用程序启动时的某处调用EnableVisualStyles() 。 我不知道它是否会起作用,但值得一试。 虽然这将需要对System.Windows.Forms的引用。

因为我如何触发它,“redirect”通常引用的forms(他们工作相同,但命名不同):

 using MessageBox = System.Windows.Forms.MessageBox; using MessageBoxImage = System.Windows.Forms.MessageBoxIcon; using MessageBoxButton = System.Windows.Forms.MessageBoxButtons; using MessageBoxResult = System.Windows.Forms.DialogResult; namespace ... class ... public MainWindow() { InitializeComponent(); System.Windows.Forms.Application.EnableVisualStyles(); } public void do() { // updated style, but good syntax for a later solution MessageBox.Show("Some Message", "DEBUG", MessageBoxButton.OK, MessageBoxImage.Question); } 

…明显的解决scheme并不适合我。