不知道为什么,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 动画 反弹 背景模糊 扁平化的更多相关文章

  1. WPF:完美自定义MeaagseBox 2.0

    很久前做个一个MessageBox,原文链接:http://www.cnblogs.com/DoNetCoder/p/3843658.html. 不过对比MessageBox还有一些瑕疵.这些天有时间 ...

  2. 示例:WPF中自定义StoryBoarService在代码中封装StoryBoard、Animation用于简化动画编写

    原文:示例:WPF中自定义StoryBoarService在代码中封装StoryBoard.Animation用于简化动画编写 一.目的:通过对StoryBoard和Animation的封装来简化动画 ...

  3. 自定义带动画的Toast

    一.style样式: 1.  // 移动和透明渐变结合的动画 <style name="anim_view">        <item name="@ ...

  4. Android 自定义波浪动画 --"让进度浪起来~"

    原文链接:http://www.jianshu.com/p/0e25a10cb9f5 一款效果不错的动画,实现也挺简单的,推荐阅读学习~ -- 由 傻小孩b 分享 waveview <Andro ...

  5. WPF 之 自定义窗体标题栏

    在WPF中自定义窗体标题栏,首先需要将窗体的WindowStyle属性设置为None,隐藏掉WPF窗体的自带标题栏.然后可以在窗体内部自定义一个标题栏. 例如,标题栏如下: <WrapPanel ...

  6. jQuery中自定义简单动画的实现

    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/stri ...

  7. 在WPF中自定义你的绘制(五)

    原文:在WPF中自定义你的绘制(五) 在WPF中自定义你的绘制(五)                                                                   ...

  8. 在WPF中自定义你的绘制(三)

    原文:在WPF中自定义你的绘制(三) 在WPF中自定义你的绘制(三)                                                                  ...

  9. 在WPF中自定义你的绘制(四)

    原文:在WPF中自定义你的绘制(四)                                   在WPF中自定义你的绘制(四)                                 ...

随机推荐

  1. Anaconda+MINGW+theano+keras安装

    前言:这几天算是被这东西困扰的十分难受,博客园和csdn各种逛,找教程,大家说法不一,很多方法也不一定适用,有些方法有待进一步完善.这里我借鉴了许多大神们的方法,以及自己的一些心得,希望对你们有一些帮 ...

  2. react native项目启动需要做的操作

    一.启动: 1.查看端口(默认8081是否被占用) netstat -ano   可以查看所有的进程 2.netstat -ano | findstr "8081"  查看某个端口 ...

  3. LockSupport浅析

    最初想有没有必要写这类文章,网上相关的文章很多,有些更为透彻,自己再写一篇不免有重复造轮子的感觉. 但想想写文除了分享知识外也可以帮助自己总结归纳,也稍稍可以提高点自我满足感. 基本的线程阻塞原语,被 ...

  4. 解决ionic3 android 运行出现Application Error - The connection to the server was unsuccessful

    在真机上启动ionic3打包成的android APK,启动了很久结果弹出这个问题: Application Error - The connection to the server was unsu ...

  5. flex布局常见用法小结

    1,display:flex 这个在父容器中声明: 2,flex-direction:row / column 默认为横向,也在父容器中设置,定义flex布局的主轴方向:一条轴为主轴,那么另一条轴自然 ...

  6. 输入一个URL之后发生了什么?

    简明扼要地说: DNS解析 TCP“三次握手”来建立连接 发送HTTP请求 服务器处理请求并返回HTTP报文 TCP“四次挥手”来关闭连接 客户端拿到资源并解析渲染页面

  7. 手写spring(简易版)

    本文版权归 远方的风lyh和博客园共有,欢迎转载,但须保留此段声明,并给出原文链接,谢谢合作,如有错误之处忘不吝批评指正! 理解Spring本质: 相信之前在使用spring的时候大家都配置web.x ...

  8. git 下载部分目录

    需求 github上整个工厂比较大,下起来费劲,如何只下载一个单独的文件件呢? 方法一 以:https://github.com/eugenp/tutorials为例,下载其中的 spring-kaf ...

  9. CC2530微处理器接口开发技术——信号灯的设计与实现

    本问主要介绍了CC2530处理器的通用输入/输出接口(GPIO),以及GPIO的位操作,理解GPIO的基本原理和功能,最后使用C语言驱动CC2530的GPIO实现对信号灯的控制. CC2530的GPI ...

  10. DRF之项目搭建

    DRF,全称Django Restful Framework,是一个基于Django的Restful接口框架,是主要用来做API接口的,为前端提供数据的接口.在前面一片博客中,我们构建了一个vue的项 ...