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启用视觉样式的更多相关文章

  1. WPF 自定义 MessageBox (相对完善版)

    WPF 自定义 MessageBox (相对完善版)     基于WPF的自定义 MessageBox. 众所周知WPF界面美观.大多数WPF元素都可以简单的修改其样式,从而达到程序的风格统一.可是当 ...

  2. WPF 自定义 MessageBox (相对完善版 v1.0.0.6)

    基于WPF的自定义 MessageBox. 众所周知WPF界面美观.大多数WPF元素都可以简单的修改其样式,从而达到程序的风格统一.可是当你不得不弹出一个消息框通知用户消息时(虽然很不建议在程序中频繁 ...

  3. WPF获取原始控件样式。

    要获取WPF控件的原始样式,需要我们安装Blend for Visual Studio. 然后,我们打开Blend for Visual Studio,创建一个WPF项目. 然后,我们向页面拖动一个B ...

  4. WPF 仿IPhone滑块开关 样式 - CheckBox

    原文:WPF 仿IPhone滑块开关 样式 - CheckBox <Style x:Key="CheckRadioFocusVisual"> <Setter Pr ...

  5. WPF获取原始控件样式

    要获取WPF控件的原始样式,需要我们安装Blend for Visual Studio. 然后,我们打开Blend for Visual Studio,创建一个WPF项目. 然后,我们向页面拖动一个B ...

  6. WPF,SilverLight中直线的样式示例

    原文:WPF,SilverLight中直线的样式示例 XAML代码:// LineStyle.xaml<Viewbox Width="600" Height="50 ...

  7. WPF Calendar 日历控件 样式自定义

    原文:WPF Calendar 日历控件 样式自定义 粗略的在代码上做了些注释 blend 生成出来的模版 有的时候 会生成 跟 vs ui界面不兼容的代码 会导致可视化设计界面 报错崩溃掉 但是确不 ...

  8. WPF 通过Win32SDK修改窗口样式

    使用函数为 SetWindowLong GetWindowLong 注册函数 [DllImport("user32.dll", EntryPoint = "GetWind ...

  9. WPF设置全局控件样式

    原文:WPF设置全局控件样式 方法: 在资源文件APP.XAML中添加如下资源 <Application x:Class="_360UI.App" xmlns="h ...

随机推荐

  1. Mysql视图使用总结

    视图View使用总结: 视图可以看作为“虚拟表”,因为它返回的结果集格式与实体数据表返回的数据集格式类似,并且引用视图的方式与引用数据表的方式相同.每次查询使用视图时,DBMS会动态生成视图结果集所需 ...

  2. Symbol Table(符号表)

    一.定义 符号表是一种存储键值对的数据结构并且支持两种操作:将新的键值对插入符号表中(insert):根据给定的键值查找对应的值(search). 二.API 1.无序符号表 几个设计决策: A.泛型 ...

  3. IDEA 安装完码云插件,运行报“Cannot run program "xxx":CreateProcess error=2,系统找不到指定的文件”

    错误:Cannot run program "E:\Program Files\Git\bin\git.exe":CreateProcess error=2,系统找不到指定的文件 ...

  4. zepto不支持animate({scrollTop:"100px"})的解决办法

    在移动web项目的开发中,遇到一个通过点击页面自动到相应的楼层处的需求,最初的想法就是使用html的target属性进行切换,但实际效果十分死板,显得毫无交互性.该前端架构采用zepto这个轻库进行开 ...

  5. type_traits.h

    type_traits.h // Filename: type_traits.h // Comment By: 凝霜 // E-mail: mdl2009@vip.qq.com // Blog: ht ...

  6. 【二叉查找树】05根据升序的链表构造二叉查找树【Convert Sorted List to Binary Search Tree】

    利用递归,构造二叉查找树, ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 给一个 ...

  7. bzoj 3926: 诸神眷顾的幻想乡 广义后缀自动机

    题目: Description 幽香是全幻想乡里最受人欢迎的萌妹子,这天,是幽香的2600岁生日,无数幽香的粉丝到了幽香家门前的太阳花田上来为幽香庆祝生日. 粉丝们非常热情,自发组织表演了一系列节目给 ...

  8. oracle rac搭建

    (一)环境准备 主机操作系统 windows10 虚拟机平台 vmware workstation 12 虚拟机操作系统 redhat 5.5 x86(32位) :Linux.5.5.for.x86. ...

  9. PythonPath在Windows 下的设置

    今天在调试Evernote SDK时, 遇到PythonPath的问题. 查了很多资料,有说用系统环境变量添加PythonPath, 有说在注册表中的PythonPath添加新Default字段, 但 ...

  10. live555源代码分析

    live555源代码下载(VC6工程):http://download.csdn.net/detail/leixiaohua1020/6374387 liveMedia 项目(http://www.l ...