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中自定义你的绘制(四) ...
随机推荐
- .Net RabbitMQ之消息通信 构建RPC服务器
1.消息投递服务 RabbitMQ是一种消息投递服务,怎么理解这句话呢?即RabbitMQ即不是消息的生产者,也是消息的消费者.他就像现实生活中快递模式,消费者在电商网站上下单买了一件商品,此时对应的 ...
- Android自动化测试之MonkeyRunner使用
MonkeyRunner工具是使用Jython(使用Java编程语言实现的Python)写出来的,它提供了多个API,通过monkeyrunner API 可以写一个Python的程序来模拟操作控制A ...
- Salesforce Sales Cloud 零基础学习(一) Product 和 Price Book
以前的博客大部分都是基于force.com以及lightning展开的自定义开发,其实salesforce提供了很多的标准的功能以及平台, Sales Cloud便是作为Salesforce核心的平台 ...
- 在vue项目中添加特殊字体
这里的特殊字体,指的是一般用户电脑未安装到本地的字体,要引入这样的字体,首先需要把字体文件下载下来. 就像上图这样的,ttf格式的,然后在项目里添加它. 然后我们在font.css里用@font-fa ...
- jmeter 新手使用教程
jmeter是一款很好的接口和压力测试工具,下载就不说了,去jmeter官网下载即可. 解压缩到本地,然后进入bin文件夹点击jmeter.bat 一.新建一个线程组 线程组内各项配置的含义 二.添加 ...
- lsyncd —— 多机器实时同步文件神器
lsyncd 是一个支持实时.双向.多机器的多模式文件同步工具. 使用 Lua 语言封装了 inotify 和 rsync 工具,采用了 Linux 内核(2.6.13 及以后)里的 inotify ...
- Go Web:数据存储(2)——CSV文件
存储到CSV文件中 1.内存存储 2.CSV文件存储 3.gob序列化存储 本文接上一篇:内存存储. 关于CSV文件的说明,见csv文件格式 当数据存储到了内存中,可以在需要的时候持久化保存到磁盘文件 ...
- [JavaScript] 前端模块编程实现
前端模块化 前端早期写代码都是全局变量满天飞,这种情况会造成全局命名空间污染,变量冲突等问题 var a = 1; var b = 2; function c(){} function d(){} 后 ...
- Js中的提升
Js的执行并不是由上向下一行一行顺序下来的,一个例子如下: a = 2; var a ; console.log(a) 输出的是2,这区别于别的语言. 再一个例子: console.log(a); / ...
- WPF 窗口
在WPF中,经常需要对窗口进行设置,下面讲讲常用的几个设置. 窗口样式 1.无边框窗口 无边框透明窗体 设置 WindowStyle="None"--无边框,如果需要其它按钮,如缩 ...