给WPF的MessageBox启用视觉样式
WPF的MessageBox为什么会这样
我的一个同学跟我说:“WPF不是新一代技术吗?怎么连MessageBox都没WinForm 的好看?”

上图是Windows Forms 的MesssageBox 与WPF 的MessageBox 的对比,我们发现,WPF没有启用视觉样式。
有的朋友会问了,那既然WPF没有启用视觉样式,那为什么它的控件的外观和启用样式后一样呢?
原因是这样的,WPF控件的绘制方式和普通程序不一样,它是采用DirectX 进行绘制的,而MessageBox 是在调用Windows API,所以MessageBox 没有采用DirectX 进行绘制,因此我们没能在MessageBox 上看到这种视觉样式。
启用WPF应用程序的视觉样式
我们都知道,Windows Forms应用程序在Main方法中会调用一个方法去启用视觉样式:
Application.EnableVisualStyles();
对于WPF我们可以用应用程序清单文件来解决这个问题。

首先,给项目添加一个应用程序清单文件。
在清单文件的最后,微软已经为我们写好了启用视觉样式的代码,我们只要把它解注释就行。
<!-- Enable themes for Windows common controls and dialogs (Windows XP and later) -->
<dependency>
<dependentAssembly>
<assemblyIdentity
type="win32"
name="Microsoft.Windows.Common-Controls"
version="6.0.0.0"
processorArchitecture="*"
publicKeyToken="6595b64144ccf1df"
language="*"
/>
</dependentAssembly>
</dependency>
把项目Rebuild一下,再运行,效果如下

怎么还是不行?楼主你骗人!!!
别急,听我慢慢道来。
我们打开应用程序生成的目录,

在这有两个exe,我们运行这个生成的WPFVisualStyle.WPF.exe,效果如下,怎么样,我没骗你吧?

为什么会这样
好了,问题解决了,扯点别的东西。下面那个WPFVisualStyle.WPF.vshost.exe,看名字就知道是在Visual Studio 调试程序时的宿主进程,它是没有嵌入清单的。
有的朋友可能会问,那我想在调试时看到视觉效果怎么办?
其实这个就在项目属性的Debug选项卡下面,找到Enable Visual Studio hosting process,把前面的勾去掉,Visual Studio在调试时就会去调用WPFVisualStyle.WPF.exe,我们也就能看到视觉效果了。
关于应用程序清单文件
说了这么多,有的朋友可能对应用程序清单文件产生兴趣了,关于它的用法,这里给一篇MSDN的文档供大家参考。
Manifest Files Reference (Windows)
本文来自Hamson博客,原文地址:http://www.cnblogs.com/hamson/archive/2013/02/18/enable-wpf-messagebox-visualstyle.html
给WPF的MessageBox启用视觉样式的更多相关文章
- WPF 自定义 MessageBox (相对完善版)
WPF 自定义 MessageBox (相对完善版) 基于WPF的自定义 MessageBox. 众所周知WPF界面美观.大多数WPF元素都可以简单的修改其样式,从而达到程序的风格统一.可是当 ...
- WPF 自定义 MessageBox (相对完善版 v1.0.0.6)
基于WPF的自定义 MessageBox. 众所周知WPF界面美观.大多数WPF元素都可以简单的修改其样式,从而达到程序的风格统一.可是当你不得不弹出一个消息框通知用户消息时(虽然很不建议在程序中频繁 ...
- WPF获取原始控件样式。
要获取WPF控件的原始样式,需要我们安装Blend for Visual Studio. 然后,我们打开Blend for Visual Studio,创建一个WPF项目. 然后,我们向页面拖动一个B ...
- WPF 仿IPhone滑块开关 样式 - CheckBox
原文:WPF 仿IPhone滑块开关 样式 - CheckBox <Style x:Key="CheckRadioFocusVisual"> <Setter Pr ...
- WPF获取原始控件样式
要获取WPF控件的原始样式,需要我们安装Blend for Visual Studio. 然后,我们打开Blend for Visual Studio,创建一个WPF项目. 然后,我们向页面拖动一个B ...
- WPF,SilverLight中直线的样式示例
原文:WPF,SilverLight中直线的样式示例 XAML代码:// LineStyle.xaml<Viewbox Width="600" Height="50 ...
- WPF Calendar 日历控件 样式自定义
原文:WPF Calendar 日历控件 样式自定义 粗略的在代码上做了些注释 blend 生成出来的模版 有的时候 会生成 跟 vs ui界面不兼容的代码 会导致可视化设计界面 报错崩溃掉 但是确不 ...
- WPF 通过Win32SDK修改窗口样式
使用函数为 SetWindowLong GetWindowLong 注册函数 [DllImport("user32.dll", EntryPoint = "GetWind ...
- WPF设置全局控件样式
原文:WPF设置全局控件样式 方法: 在资源文件APP.XAML中添加如下资源 <Application x:Class="_360UI.App" xmlns="h ...
随机推荐
- Spring- 异常org.xml.sax.SAXParseException; systemId: http://www.springframework.org/schema/context/; lineNumber: 1; columnNumber: 55; 在 publicId 和 systemId 之间需要有空格。
抛出异常 六月 03, 2018 7:40:44 下午 org.springframework.context.support.AbstractApplicationContext prepareRe ...
- 仿新浪游戏频道js多栏目全屏下拉菜单导航条
仿新浪游戏频道js多栏目全屏下拉菜单导航条,新浪,游戏频道,js组件,多栏目,全屏下拉,下拉菜单,导航条.代码下载地址:http://www.huiyi8.com/sc/26765.html更多请访问 ...
- Codeforces 897C Nephren gives a riddle:模拟【珂学】
题目链接:http://codeforces.com/contest/897/problem/C 题意: 给你一些字符串: A: [What are you doing at the end of t ...
- GUI创建各常用控件(一)
首先,作个申明: 1.这是一个野路子非科班的小菜鸟的学习,故诚心欢迎批评指正(同时所述内容可能有误): 2.本人目前使用的Unity3D版本为 5.3.5: 言归正传! 事实上在开发过程中已经很少用G ...
- beans.factory.BeanCreationException beans.factory.annotation.Autowired(required=true)
主要是这三个方面排查: 1,注入写成这样 @Autowired private BrandServiceImpl brandServiceImpl; 2,jar冲突,在pom.xml中 ...
- jmeter-接口的依赖
接口的依赖 接口2要用到接口1中返回的数据 大致思路:建立接口1和接口2,把接口1中的yangli字段传递给接口中的入参date里 步骤如下: 1.接口1 2\新建一个HTTP请求,命名为老黄历接口2 ...
- python基础-循环语句while
循环语句:while\for\嵌套 循环控制语句:break\continue break:跳出整个循环,不会再继续循环下去 continue:跳出本次循环,继续下一次循环 while循环: coun ...
- HLSL学习笔记(一):基础
http://www.cnblogs.com/rainstorm/archive/2013/05/04/3057444.html 前言 五一在家无事,于是学习了一下HLSL,基于XAN4.0的.学习完 ...
- BZOJ3680:吊打XXX
我对模拟退火的理解:https://www.cnblogs.com/AKMer/p/9580982.html 我对爬山的理解:https://www.cnblogs.com/AKMer/p/95552 ...
- nginx实现防盗链配置方法介绍
有些朋友觉得防盗链就是防止图片,其实有很多东西要进行防盗链了,下面我来介绍在nginx中实现防盗链配置方法有对图片防盗链与下载资源等. 防盗链配置 假设网站域名是 www.php100.com. 编辑 ...