Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# WPF MessageBox窗口样式_C#_Wpf_Messagebox - Fatal编程技术网

C# WPF MessageBox窗口样式

C# WPF MessageBox窗口样式,c#,wpf,messagebox,C#,Wpf,Messagebox,如何将默认Windows样式应用于WPF中的标准MessageBox 例如,当我执行下一个代码时: MessageBox.Show("Hello Stack Overflow!", "Test", MessageBoxButton.OKCancel, MessageBoxImage.Exclamation); 我收到消息框: 但在WinForms中,一切都与样式有关: MessageBox.Show("Hello Stack Overflow!", "Test", MessageB

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

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

MessageBox.Show("Hello Stack Overflow!", "Test", MessageBoxButton.OKCancel, 
    MessageBoxImage.Exclamation);
我收到消息框:

但在WinForms中,一切都与样式有关:

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

WinForms one之所以能以这种方式工作,是因为在其主要功能中打开了视觉样式(即使用通用控件v6)。如果删除对的调用,那么WinForms消息框将与WPF消息框一样

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


您可以尝试在WPF应用程序启动时调用
EnableVisualStyles()
。我不知道它是否有效,但值得一试。但是,这需要引用System.Windows.Forms。

WinForms one之所以能以这种方式工作,是因为在其主要功能中打开了视觉样式(即使用通用控件v6)。如果删除对的调用,那么WinForms消息框将与WPF消息框一样

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

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

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

要摆脱它,您必须创建一个自定义app.manifest文件(添加->新建项目->应用程序清单文件),并在其中粘贴以下代码(就在/trustInfo-标记之后):


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

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

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

要摆脱它,您必须创建一个自定义app.manifest文件(添加->新建项目->应用程序清单文件),并在其中粘贴以下代码(就在/trustInfo-标记之后):


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


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

此外,对于WPF,我将使用具有a的重新编译,对于WPF,我将使用具有a的重新编译,正如我触发它的方式一样,“重定向”对表单的常规引用(它们工作相同,但命名不同):

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

正如我触发它的方式一样,“重定向”对表单的常规引用(它们的作用相同,但命名不同):


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

创建一个新清单并粘贴以下内容:


创建新的清单并粘贴:



谢谢。工作完美!我想知道这段代码是否已经存在于清单中,但默认情况下已被注释。顺便说一句,它可以在项目属性中不启用清单的情况下工作。当我使用VS 2010在Windows 7上取消对此的注释时,我得到一个错误“找不到文件‘Microsoft.Windows.Common-Controls,Version=6.0.0.0,Culture=*,PublicKeyToken=6595b64144ccf1df,ProcessorArchitecture=*,Type=win32”,似乎大多数搜索结果显示人们正在删除清单以解决他们的问题(在VS2005升级之后)。@BrettRyan这是原因:@PeterSivák它在调试模式下无法工作,因此尝试在不调试的情况下启动(CTRL+F5)谢谢您的回答。令人惊讶的是,我不得不为WPF中开箱即用的如此基本的东西付出如此多的努力。另一方面,托盘图标也有很多问题,我们最终只是将WinForms one与系统菜单一起使用,这是唯一一个在所有Windows es、RemoteApps和Citrix上都能工作的图标。WPF使许多复杂的东西变得简单,但使一些最基本的东西变得非常复杂。谢谢。工作完美!我想知道这段代码是否已经存在于清单中,但默认情况下已被注释。顺便说一句,它可以在项目属性中不启用清单的情况下工作。当我使用VS 2010在Windows 7上取消对此的注释时,我得到一个错误“找不到文件‘Microsoft.Windows.Common-Controls,Version=6.0.0.0,Culture=*,PublicKeyToken=6595b64144ccf1df,ProcessorArchitecture=*,Type=win32”,似乎大多数搜索结果显示人们正在删除清单以解决他们的问题(在VS2005升级之后)。@BrettRyan这是原因:@PeterSivák它在调试模式下无法工作,因此尝试在不调试的情况下启动(CTRL+F5)谢谢您的回答。令人惊讶的是,我不得不为WPF中开箱即用的如此基本的东西付出如此多的努力。另一方面,托盘图标也有很多问题,我们最终只是将WinForms one与系统菜单一起使用,这是唯一一个在所有Windows es、RemoteApps和Citrix上都能工作的图标。WPF使许多复杂的东西变得简单,但使一些最基本的东西变得非常复杂。如果只使用WinForms中的所有内容(包括对System.Windows.Forms的引用和使用该版本的MessageBox),那么它是不好的方法。如果只使用WinForms中的所有内容,那么它就是有效的(包括对System.Windows.Forms的引用并使用该版本的MessageBox),但这不是一个好方法。+1非常好的方法。由于ClickOnce deploym存在问题
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);
    }