[英]WPF MessageBox window style
如何将默认 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 为某些控件选取了旧样式。
要摆脱它,您必须创建一个自定义 app.manifest 文件(添加 -> 新项目 -> 应用程序清单文件)并将以下代码粘贴到其中(紧跟在 /trustInfo - Tag 之后):
<!-- 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 编译您的解决方案(在项目属性 -> 应用程序 -> 指向“图标和清单”中的新清单中进行设置)。
如果您现在启动您的应用程序,它应该看起来像 WinForms-MessageBox。
至于我如何触发它,“重定向”对表单的通常引用(它们的工作方式相同,但名称不同):
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);
}
...清单解决方案对我不起作用。
WinForms 以这种方式工作的原因是因为在其 Main 函数中启用了视觉样式(即使用 Common Controls v6)。 如果您删除对System.Windows.Forms.Application.EnableVisualStyles()的调用,则 WinForms 消息框将与 WPF 中的一样。
WPF 应用程序不会发生这种情况,可能是因为所有 WPF 控件都已呈现,因此无需使用新版本的通用控件。
您可以尝试在 WPF 应用程序启动时的某处调用EnableVisualStyles()
。 我不知道它是否会起作用,但值得一试。 不过,这将需要对 System.Windows.Forms 的引用。
此外,对于 WPF,我建议使用具有WPF 消息框的扩展 WPF 工具包
创建一个新的清单并粘贴:
<?xml version="1.0" encoding="utf-8"?>
<assembly manifestVersion="1.0" xmlns="urn:schemas-microsoft-com:asm.v1">
<assemblyIdentity version="1.0.0.0" name="MyApplication.app"/>
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">
<security>
<requestedPrivileges xmlns="urn:schemas-microsoft-com:asm.v3">
<requestedExecutionLevel level="asInvoker" uiAccess="false" />
</requestedPrivileges>
</security>
</trustInfo>
<compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1">
<application>
</application>
</compatibility>
<dependency>
<dependentAssembly>
<assemblyIdentity
type="win32"
name="Microsoft.Windows.Common-Controls"
version="6.0.0.0"
processorArchitecture="*"
publicKeyToken="6595b64144ccf1df"
language="*"
/>
</dependentAssembly>
</dependency>
</assembly>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.