给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 ...
随机推荐
- Luogu-1381 单词背诵
先将n个单词插入哈希表,记录左右端点,每次右端点往后移动,读入一个新的单词并记录下它的哈希值,如果这个单词之前没出现过那么更新\(ans\)和\(minl\),如果左端点的单词出现了不止一次则可以往右 ...
- node 渲染html模板配置
node 渲染html模板配置 安装swig模块 npm install swig--save - dev 加载swig模块 var swig = require('swig'); 模板配置 //第一 ...
- 简单封装的Log4net
1. [代码]使用 log = new Logger(this.GetType());log.Info("Hello world.");2. [代码]第二个版本,修复了Co ...
- js中innerText/value/innerHTML三个属性的区别
在做一个两个窗口之间的简单信息交互时遇见了一点问题,导致信息无法正常的传递. 最后发现问题是在innerText和value这两个属性上,先简单的总结记录一下几个相似的属性的作用: 1.innerTe ...
- HTML-CSS浮动元素详解
浮动定位是指 1.1将元素排除在普通流之外,即元素将脱离标准文档流 1.2元素将不在页面占用空间 1.3将浮动元素放置在包含框的左边或者右边 1.4浮动元素依旧位于包含框之内 2. 浮动的框可以向左或 ...
- 解决Eclipse和myeclipse在进行 html,jsp等 页面编辑时,自动格式化变丑的问题
在eclipse和myelipse写JAVA代码时中使用ctrl+shift+f 快捷键自动排版省时又省力,排版后的代码规范美观又层次性,但在我们写jsp或html代码时,使用这个快捷键排版简直奇丑无 ...
- python-socket2
UDP,服务端 #! /usr/bin/env python #coding=utf-8 import socket #创建socket,指定ipv4,udp类型 s = socket.socket( ...
- UI层自动化测试介绍
UI指的是用户可以用肉眼可以看到的页面. UI层自动化测试的原理.不论是web端还是移动端,原理都是一样的,就是基于页面元素的识别和定位来进行模拟用户行为. 首先识别到某个元素,比如一个按钮,然后定义 ...
- Git_错误_01_failed to push some refs to 'git@github.com
在使用git 对源代码进行push到gitHub时可能会出错,信息如下 此时很多人会尝试下面的命令把当前分支代码上传到master分支上. $ git push -u origin master 但依 ...
- 绘图工具--turtle模块
turtle模块主要使用两个类,一个是TurtleScreen类,表示画布(窗口),用来展示画的位置:一个是Turtle类,用来充当画笔,用来画. 两个类的方法也以同名的函数的形式存在,所以可以以面向 ...