WPF MessageBox窗口样式

Kyr*_*o M 40 c# wpf messagebox

如何将默认Windows样式应用于MessageBoxWPF中的标准?

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

MessageBox.Show("Hello Stack Overflow!", "Test", MessageBoxButton.OKCancel, 
    MessageBoxImage.Exclamation);
Run Code Online (Sandbox Code Playgroud)

我收到消息框:

在此输入图像描述

但是在WinForms中,风格一切都很好:

MessageBox.Show("Hello Stack Overflow!", "Test", MessageBoxButtons.OKCancel, 
    MessageBoxIcon.Exclamation);
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

Gim*_*mno 59

根据这个页面,WPF为一些控件选择旧样式.

要摆脱它,你必须创建一个自定义app.manifest文件(添加 - >新项 - >应用程序清单文件)并粘贴以下代码(在/ 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>
Run Code Online (Sandbox Code Playgroud)

然后你必须用这个app.manifest编译你的解决方案(在项目属性中设置它 - >应用程序 - >指向"图标和清单"中的新清单).

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

  • 当我在Windows 7上使用VS 2010取消注释时,我收到错误"无法找到文件"Microsoft.Windows.Common-Controls,Version = 6.0.0.0,Culture =*,PublicKeyToken = 6595b64144ccf1df,ProcessorArchitecture =*,Type = win32 '.",似乎大多数搜索结果都显示人们正在删除清单以解决他们的问题(在VS2005升级之后). (7认同)
  • @PeterSivák它不能在调试模式下工作,所以尝试在没有调试的情况下启动(CTRL + F5) (4认同)

And*_*ndy 6

WinForms工作方式的原因是因为在其Main函数中打开了视觉样式(即使用Common Controls v6).如果删除对System.Windows.Forms.Application.EnableVisualStyles()的调用,则WinForms消息框看起来就像WPF一样.

WPF应用程序不会发生这种情况,可能是因为所有WPF控件都已呈现,因此无需使用新版本的Common Control.

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


gco*_*res 6

另外,对于WPF,我建议使用具有WPF消息框Extended WPF Toolkit


Ban*_*cid 6

至于我如何触发它,“重定向”对表单的通常引用(它们的工作方式相同,但名称不同):

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);
    }
Run Code Online (Sandbox Code Playgroud)

...清单解决方案对我不起作用。