不知道为什么,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. python(leetcode)-344反转字符串

    编写一个函数,其作用是将输入的字符串反转过来.输入字符串以字符数组 char[] 的形式给出. 不要给另外的数组分配额外的空间,你必须原地修改输入数组.使用 O(1) 的额外空间解决这一问题. 你可以 ...

  2. Retrofit2 完全解析 探索与okhttp之间的关系

    转载请标明出处: http://blog.csdn.net/lmj623565791/article/details/51304204: 本文出自:[张鸿洋的博客] 之前写了个okhttputils的 ...

  3. 移动端Web开发,ios下 input为圆角

    在处理input的问题时,一般不想要input的原来的样式,一般就直接处理 border: none; outline: none; background: transparent; 这样之后,一般就 ...

  4. Python3.7 dataclass 介绍

    Posted on 2018年6月28日 by laixintao 1 Comment Python3.7 加入了一个新的 module:dataclasses.可以简单的理解成“支持默认值.可以修改 ...

  5. Execution failed for task ':app:processDebugResources'

    经常会遇到突然AndroidStudio编译不了程序,报错误: Execution failed for task ':app:processDebugResources'. > Failed ...

  6. MFC原理第六讲.消息传递

    ---恢复内容开始--- MFC原理第六讲.消息传递 一丶简介 通过上一讲我们的消息映射表.我们得知. 消息映射表 会保存父类的MessageMap 以及自己当前的消息结构体数组. 消息传递是一层一层 ...

  7. Go中iota是什么

    Go iota是一个比较奇怪的存在,它只能用在const的申明中,是一个从0开始的行数索引器. 看代码 package main import ( "fmt" ) const ( ...

  8. shell高效处理文本(1):xargs并行处理

    xargs具有并行处理的能力,在处理大文件时,如果应用得当,将大幅提升效率. xargs详细内容(全网最详细):https://www.cnblogs.com/f-ck-need-u/p/592592 ...

  9. ZooKeeper系列(2):ZooKeeper命令行工具zkCli.sh

    ZooKeeper系列文章:https://www.cnblogs.com/f-ck-need-u/p/7576137.html#zk 1.简介 ZooKeeper提供了一个非常简单的命令行客户端zk ...

  10. QApplication:No such file or directory 错误解决

    首先打开 Makefile 文件,查看其中 INCPATH 变量的值是否包含程序中所涉及到的头文件路径. MAKEFILE = Makefile ####### Compiler, tools and ...