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中自定义你的绘制(四) ...
随机推荐
- ASP.NET Core微服务+Tabler前端框架搭建个人博客2--系统架构
功能分析 在整个微服务架构的搭建过程中,我们需要做的第一步就是对服务进行拆分,将一个完整的系统模块化,通过对各个模块互联,共同完成一个系统的工作.既然要做到模块化,那么必须明白你的系统的需求到底是什么 ...
- php(curl请求)测试接口案例
请求测试接口,如下: $data = [']; $result = curlrequest($apiUrl,$data); ){ echo json_encode($result); }else{ e ...
- 【原】git常用命令笔记
平时要用一些命令老是去网上找还挺麻烦的,所以总结起来,还是写在了github上,博客园啥时候也支持一个markdown啊!! https://xianyulaodi.github.io/2017/03 ...
- 《HelloGitHub月刊》第 01 期
<HelloGitHub月刊> 因为现在这个项目只有我自己做,只敢叫"月刊",希望有志同道合者,快点加入到这个项目中来!同时,如果您有更好的建议或者意见,欢迎联系我.联 ...
- Apache-Flink深度解析-SQL概览
你可能感兴趣的文章: Flink入门 Flink DataSet&DataSteam API Flink集群部署 Flink重启策略 Flink分布式缓存 Flink重启策略 Flink中的T ...
- iOS逆向开发(4):注入目标函数 | fishhook | MobileSubstrate | MSHookFunction | iOSOpenDev
从获得APP的所有类声明,到锁定目标类与函数,现在是时候注入函数了. 所谓"注入函数",小程的意思是让APP执行到小程写的代码中,跟"钩子"的概念一致.小程把个 ...
- JsonBuilder初出茅庐
互联网这股东风不久前刮到了甘凉国,国王老甘独具慧眼,想赶紧趁着东风未停大力发展移动互联网,因为他笃信布斯雷的理论:“站在风口上,猪都能飞起来”.无奈地方偏僻落后,国内无可用之才啊.老甘一筹莫展的低头凝 ...
- 开始翻译Disruptor
刚开始接触Disruptor,看了作者的博客,发现这个大牛很与众不同,他不仅讲解自己的框架的设计思想,还深度介绍了这样设计的原因,其知识范围涵盖了操作系统.数据结构.计算机组成,很有学习的价值.网上有 ...
- Python从入门到精通系列文章总目录
Python最新全套课程(8月中旬开的课),共四个月.所有课件,项目源码,课后习题和答案都包括在内. 包括:Python实战项目引入.Python基础.爬虫基础.爬虫库.Scrapy爬虫框架.动态页面 ...
- Spark提高篇——RDD/DataSet/DataFrame(二)
该部分分为两篇,分别介绍RDD与Dataset/DataFrame: 一.RDD 二.DataSet/DataFrame 该篇主要介绍DataSet与DataFrame. 一.生成DataFrame ...