WPF:完美自定义MeaagseBox 动画 反弹 背景模糊 扁平化
不知道为什么,WPF的MeaageBox的风格还停留在Win 2000的风格。。。

很久前就想自己封装一个MessageBox出来,但是都只是简单的封装,不怎么具有通用性。这次终于搞完了。
使用方法和系统的MessageBox的使用方法相似度90%以上。另外10%主要是自己加进去了一些更实用的东西进去。
好,废话不多说。
MessageBox经常使用的元素有这些:
1.MessageButton:由于方便以后扩展,这里不使用原生的MessageButton枚举,而是自定义一个枚举:
/// <summary>
/// CMessageBox显示的按钮类型
/// </summary>
public enum CMessageBoxButton
{
OK = ,
OKCancel = ,
YesNO = ,
YesNoCancel =
}
2.MessageBoxImage,由于方便以后扩展,这里不使用原生的MessageBoxImage枚举,而是自定义一个枚举:
/// <summary>
/// CMessageBox显示的图标类型
/// </summary>
public enum CMessageBoxImage
{
None = ,
Error = ,
Question = ,
Warning =
}
CMessageBoxImage
3.MessageBoxResult,由于方便以后扩展,这里不使用原生的MessageBoxResult枚举,而是自定义一个枚举:
/// <summary>
/// 消息框的返回值
/// </summary>
public enum CMessageBoxResult
{
//用户直接关闭了消息窗口
None = ,
//用户点击确定按钮
OK = ,
//用户点击取消按钮
Cancel = ,
//用户点击是按钮
Yes = ,
//用户点击否按钮
No =
}
CMessageBoxResult
4.CMessageBoxDefaultButton,Windows的MessageBox并没有这个枚举。通过这个枚举可以将MessageBox上面的按钮突出显示(比如YesNo的MessageBox可以突出显示Yes),这样的应用场景很多。
/// <summary>
/// 消息的重点显示按钮
/// </summary>
public enum CMessageBoxDefaultButton
{
None = ,
OK = ,
Cancel = ,
Yes = ,
No =
}
CMessageBoxDefaultButton
MessageBox常用的枚举就是1、2、3.定义完成枚举之后就可以仿造Windows的MessageBox重载Show方法了:
/// <summary>
/// 显示消息框
/// </summary>
/// <param name="cmessageBoxText">消息内容</param>
public static CMessageBoxResult Show(string cmessageBoxText) /// <summary>
/// 显示消息框
/// </summary>
/// <param name="cmessageBoxText">消息内容</param>
/// <param name="caption">消息标题</param>
public static CMessageBoxResult Show(string cmessageBoxText, string caption) /// <summary>
/// 显示消息框
/// </summary>
/// <param name="cmessageBoxText">消息内容</param>
/// <param name="CMessageBoxButton">消息框按钮</param>
public static CMessageBoxResult Show(string cmessageBoxText, CMessageBoxButton CMessageBoxButton) /// <summary>
/// 显示消息框
/// </summary>
/// <param name="cmessageBoxText">消息内容</param>
/// <param name="caption">消息标题</param>
/// <param name="CMessageBoxButton">消息框按钮</param>
public static CMessageBoxResult Show(string cmessageBoxText, string caption, CMessageBoxButton CMessageBoxButton) /// <summary>
/// 显示消息框
/// </summary>
/// <param name="cmessageBoxText">消息内容</param>
/// <param name="caption">消息标题</param>
/// <param name="CMessageBoxButton">消息框按钮</param>
/// <param name="CMessageBoxImage">消息框图标</param>
/// <returns></returns>
public static CMessageBoxResult Show(string cmessageBoxText, string caption, CMessageBoxButton CMessageBoxButton, CMessageBoxImage CMessageBoxImage) /// <summary>
/// 显示消息框
/// </summary>
/// <param name="cmessageBoxText">消息内容</param>
/// <param name="caption">消息标题</param>
/// <param name="CMessageBoxButton">消息框按钮</param>
/// <param name="CMessageBoxImage">消息框图标</param>
/// <param name="CMessageBoxDefaultButton">消息框默认按钮</param>
/// <returns></returns>
public static CMessageBoxResult Show(string cmessageBoxText, string caption, CMessageBoxButton CMessageBoxButton, CMessageBoxImage CMessageBoxImage, CMessageBoxDefaultButton CMessageBoxDefaultButton)
然后需要添加一个Window,这个Window就是自定义的MessageBox的主界面。这个界面没什么好说的,需要代码的可以在最后的代码下载链接进行下载。
值得一提的是,在Loaded的Trriger里面为MessageBox添加了一个启动动画,这个动画是个缩放动画,并带有反弹效果。
然后需要未MessageBox实现模糊效果。当然模糊效果并不是说让MessageBox变得模糊,而是MessageBox弹出时其父窗体变得模糊。
模糊效果很好实现:
BlurEffect effect = new BlurEffect();
effect.Radius = ;
effect.KernelType = KernelType.Gaussian;
Application.Current.Windows[].Effect = effect;
最后附上一个有点卡的GIF模拟图:
真实效果比它好太多。。。
源代码下载:http://download.csdn.net/detail/lyclovezmy/7635001
WPF:完美自定义MeaagseBox 动画 反弹 背景模糊 扁平化的更多相关文章
- WPF:完美自定义MeaagseBox 2.0
很久前做个一个MessageBox,原文链接:http://www.cnblogs.com/DoNetCoder/p/3843658.html. 不过对比MessageBox还有一些瑕疵.这些天有时间 ...
- 示例:WPF中自定义StoryBoarService在代码中封装StoryBoard、Animation用于简化动画编写
原文:示例:WPF中自定义StoryBoarService在代码中封装StoryBoard.Animation用于简化动画编写 一.目的:通过对StoryBoard和Animation的封装来简化动画 ...
- 自定义带动画的Toast
一.style样式: 1. // 移动和透明渐变结合的动画 <style name="anim_view"> <item name="@ ...
- Android 自定义波浪动画 --"让进度浪起来~"
原文链接:http://www.jianshu.com/p/0e25a10cb9f5 一款效果不错的动画,实现也挺简单的,推荐阅读学习~ -- 由 傻小孩b 分享 waveview <Andro ...
- WPF 之 自定义窗体标题栏
在WPF中自定义窗体标题栏,首先需要将窗体的WindowStyle属性设置为None,隐藏掉WPF窗体的自带标题栏.然后可以在窗体内部自定义一个标题栏. 例如,标题栏如下: <WrapPanel ...
- jQuery中自定义简单动画的实现
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/stri ...
- 在WPF中自定义你的绘制(五)
原文:在WPF中自定义你的绘制(五) 在WPF中自定义你的绘制(五) ...
- 在WPF中自定义你的绘制(三)
原文:在WPF中自定义你的绘制(三) 在WPF中自定义你的绘制(三) ...
- 在WPF中自定义你的绘制(四)
原文:在WPF中自定义你的绘制(四) 在WPF中自定义你的绘制(四) ...
随机推荐
- Anaconda+MINGW+theano+keras安装
前言:这几天算是被这东西困扰的十分难受,博客园和csdn各种逛,找教程,大家说法不一,很多方法也不一定适用,有些方法有待进一步完善.这里我借鉴了许多大神们的方法,以及自己的一些心得,希望对你们有一些帮 ...
- react native项目启动需要做的操作
一.启动: 1.查看端口(默认8081是否被占用) netstat -ano 可以查看所有的进程 2.netstat -ano | findstr "8081" 查看某个端口 ...
- LockSupport浅析
最初想有没有必要写这类文章,网上相关的文章很多,有些更为透彻,自己再写一篇不免有重复造轮子的感觉. 但想想写文除了分享知识外也可以帮助自己总结归纳,也稍稍可以提高点自我满足感. 基本的线程阻塞原语,被 ...
- 解决ionic3 android 运行出现Application Error - The connection to the server was unsuccessful
在真机上启动ionic3打包成的android APK,启动了很久结果弹出这个问题: Application Error - The connection to the server was unsu ...
- flex布局常见用法小结
1,display:flex 这个在父容器中声明: 2,flex-direction:row / column 默认为横向,也在父容器中设置,定义flex布局的主轴方向:一条轴为主轴,那么另一条轴自然 ...
- 输入一个URL之后发生了什么?
简明扼要地说: DNS解析 TCP“三次握手”来建立连接 发送HTTP请求 服务器处理请求并返回HTTP报文 TCP“四次挥手”来关闭连接 客户端拿到资源并解析渲染页面
- 手写spring(简易版)
本文版权归 远方的风lyh和博客园共有,欢迎转载,但须保留此段声明,并给出原文链接,谢谢合作,如有错误之处忘不吝批评指正! 理解Spring本质: 相信之前在使用spring的时候大家都配置web.x ...
- git 下载部分目录
需求 github上整个工厂比较大,下起来费劲,如何只下载一个单独的文件件呢? 方法一 以:https://github.com/eugenp/tutorials为例,下载其中的 spring-kaf ...
- CC2530微处理器接口开发技术——信号灯的设计与实现
本问主要介绍了CC2530处理器的通用输入/输出接口(GPIO),以及GPIO的位操作,理解GPIO的基本原理和功能,最后使用C语言驱动CC2530的GPIO实现对信号灯的控制. CC2530的GPI ...
- DRF之项目搭建
DRF,全称Django Restful Framework,是一个基于Django的Restful接口框架,是主要用来做API接口的,为前端提供数据的接口.在前面一片博客中,我们构建了一个vue的项 ...