WP版的QQ提示消息的时候从顶部滑入,3秒后从顶部滑出,本文模仿该效果实现一个MessageToastManager类用于显示提示消息

思路很简单,就是动画而已,支持配置颜色和回掉

// *************************************************
//
// 作者:bomo
// 小组:WP开发组
// 创建日期:2014/7/7 15:18:12
// 版本号:V1.00
// 说明:
//
// *************************************************
//
// 修改历史:
// Date WhoChanges Made
// 2014/7/7 15:18:12 bomo Initial creation
//
// ************************************************* using System;
using System.Diagnostics;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Controls.Primitives;
using System.Windows.Media;
using System.Windows.Media.Animation; namespace XTuOne.Utility.Helpers
{
/// <summary>
/// 消息提示工具
/// </summary>
public class MessageToastManager
{
private static readonly Color defaultForegroundColor = Color.FromArgb(, , , );
private static readonly Color defaultBackgroundColor = Colors.White; public static void Show(string text, Action complete = null, double height = )
{
Show(text, defaultForegroundColor, defaultBackgroundColor, complete, height);
} public static void Show(string text, Color foregroundColor, Color backgroundColor, Action complete = null, double height = )
{
Show(text, new SolidColorBrush(foregroundColor), new SolidColorBrush(backgroundColor), complete, height);
} public static void Show(string text, Brush foregroundBrush, Brush backgroundBrush, Action complete = null, double height = )
{
var p = new Popup
{
Child = new Border
{
Width = Application.Current.Host.Content.ActualWidth,
Background = backgroundBrush,
Child = new TextBlock
{
Text = text,
Foreground = foregroundBrush,
FontSize = (double)Application.Current.Resources["PhoneFontSizeNormal"],
VerticalAlignment = VerticalAlignment.Center,
Margin = new Thickness(, , , )
}
}
}; Show(p, complete, height);
} private static void Show(Popup popup, Action complete = null, double height = )
{
if (!(popup.Child.RenderTransform is CompositeTransform))
{
popup.Child.RenderTransform = new CompositeTransform();
}
((CompositeTransform)popup.Child.RenderTransform).TranslateY = -height; Debug.Assert(popup.Child is FrameworkElement); var element =popup.Child as FrameworkElement;
element.Height = height; var storyboard = new Storyboard
{
AutoReverse = false
}; var doubleAnimaionUsingKeyFrames = new DoubleAnimationUsingKeyFrames();
Storyboard.SetTarget(doubleAnimaionUsingKeyFrames, popup.Child);
Storyboard.SetTargetProperty(doubleAnimaionUsingKeyFrames, new PropertyPath("(UIElement.Opacity)", new object[]));
storyboard.Children.Add(doubleAnimaionUsingKeyFrames); //0.5秒透明度从0-1
var doubleKeyFrame = new EasingDoubleKeyFrame
{
KeyTime = KeyTime.FromTimeSpan(TimeSpan.FromSeconds(0.5)),
Value = ,
EasingFunction = new CubicEase {EasingMode = EasingMode.EaseOut}
};
doubleAnimaionUsingKeyFrames.KeyFrames.Add(doubleKeyFrame);
doubleKeyFrame = new EasingDoubleKeyFrame
{
KeyTime = KeyTime.FromTimeSpan(TimeSpan.FromSeconds(2.4)),
Value = 0.995,
EasingFunction = new CubicEase { EasingMode = EasingMode.EaseIn }
};
doubleAnimaionUsingKeyFrames.KeyFrames.Add(doubleKeyFrame);
doubleKeyFrame = new EasingDoubleKeyFrame
{
KeyTime = KeyTime.FromTimeSpan(TimeSpan.FromSeconds()),
Value = 0.1,
};
doubleAnimaionUsingKeyFrames.KeyFrames.Add(doubleKeyFrame); doubleAnimaionUsingKeyFrames = new DoubleAnimationUsingKeyFrames();
Storyboard.SetTarget(doubleAnimaionUsingKeyFrames, popup.Child);
Storyboard.SetTargetProperty(doubleAnimaionUsingKeyFrames, new PropertyPath("(UIElement.RenderTransform).(CompositeTransform.TranslateY)", new object[]));
storyboard.Children.Add(doubleAnimaionUsingKeyFrames);
doubleKeyFrame = new EasingDoubleKeyFrame
{
KeyTime = KeyTime.FromTimeSpan(TimeSpan.FromSeconds(0.5)),
Value = ,
EasingFunction = new CubicEase { EasingMode = EasingMode.EaseOut }
};
doubleAnimaionUsingKeyFrames.KeyFrames.Add(doubleKeyFrame);
doubleKeyFrame = new EasingDoubleKeyFrame
{
KeyTime = KeyTime.FromTimeSpan(TimeSpan.FromSeconds(2.4)),
Value = ,
};
doubleAnimaionUsingKeyFrames.KeyFrames.Add(doubleKeyFrame);
doubleKeyFrame = new EasingDoubleKeyFrame
{
KeyTime = KeyTime.FromTimeSpan(TimeSpan.FromSeconds()),
Value = -height,
EasingFunction = new CubicEase { EasingMode = EasingMode.EaseIn }
};
doubleAnimaionUsingKeyFrames.KeyFrames.Add(doubleKeyFrame); var objectAnimaionUsingKeyFrames = new ObjectAnimationUsingKeyFrames();
Storyboard.SetTarget(objectAnimaionUsingKeyFrames, popup);
Storyboard.SetTargetProperty(objectAnimaionUsingKeyFrames, new PropertyPath("(Popup.IsOpen)", new object[]));
storyboard.Children.Add(objectAnimaionUsingKeyFrames); var discreteObjectKeyFrame = new DiscreteObjectKeyFrame
{
KeyTime = KeyTime.FromTimeSpan(TimeSpan.FromSeconds()),
Value = true
};
objectAnimaionUsingKeyFrames.KeyFrames.Add(discreteObjectKeyFrame); discreteObjectKeyFrame = new DiscreteObjectKeyFrame
{
KeyTime = KeyTime.FromTimeSpan(TimeSpan.FromSeconds()),
Value = false
};
objectAnimaionUsingKeyFrames.KeyFrames.Add(discreteObjectKeyFrame); if (complete!=null)
{
storyboard.Completed += (s, e) => complete.Invoke();
} storyboard.Begin();
}
}
}

【WP8】仿QQ提示消息的更多相关文章

  1. jquery-模仿qq提示消息

    ( function() { var ua = navigator.userAgent.toLowerCase(); var is = (ua.match(/\b(chrome|opera|safar ...

  2. ZENG msgbox仿qq提示

    ZENG.msgbox.show("设置成功!", 4, 2000); ZENG.msgbox.show("服务器繁忙,请稍后再试.", 1, 2000); Z ...

  3. wpf实现仿qq消息提示框

    原文:wpf实现仿qq消息提示框 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/huangli321456/article/details/5052 ...

  4. SignalR快速入门 ~ 仿QQ即时聊天,消息推送,单聊,群聊,多群公聊(基础=》提升)

     SignalR快速入门 ~ 仿QQ即时聊天,消息推送,单聊,群聊,多群公聊(基础=>提升,5个Demo贯彻全篇,感兴趣的玩才是真的学) 官方demo:http://www.asp.net/si ...

  5. Android 仿QQ首页的消息和电话的切换,首页的头部(完全用布局控制)

    Android 仿QQ首页的消息和电话的切换,首页的头部(完全用布局控制) 首先贴上七个控制布局代码 1.title_text_sel.xml 字体颜色的切换 放到color文件夹下面 <?xm ...

  6. Android 高仿QQ滑动弹出菜单标记已读、未读消息

    在上一篇博客<Android 高仿微信(QQ)滑动弹出编辑.删除菜单效果,增加下拉刷新功能>里,已经带着大家学习如何使用SwipeMenuListView这一开源库实现滑动列表弹出菜单,接 ...

  7. iOS天气动画、高仿QQ菜单、放京东APP、高仿微信、推送消息等源码

    iOS精选源码 TYCyclePagerView iOS上的一个无限循环轮播图组件 iOS高仿微信完整项目源码 想要更简单的推送消息,看本文就对了 ScrollView嵌套ScrolloView解决方 ...

  8. Socket实现仿QQ聊天(可部署于广域网)附源码(1)-简介

    1.前言 本次实现的这个聊天工具是我去年c#程序设计课程所写的Socket仿QQ聊天,由于当时候没有自己的服务器,只能在机房局域网内进行测试,最近在腾讯云上买了一台云主机(本人学生党,腾讯云有个学生专 ...

  9. < JAVA - 大作业(2)仿qq即时通讯软件 >

    < JAVA - 大作业(2)仿qq即时通讯软件 > 背景 JAVA上机大作业:设计一个仿qq即时通讯软件 任务简要叙述:设计一款仿QQ的个人用户即时通讯软件,能够实现注册,登陆,与好友聊 ...

随机推荐

  1. django signal

    @receiver(post_save, sender=User) def create_account(sender, instance=None, **kwargs): if instance i ...

  2. JAVA-JSP内置对象之request获得参数的所有参数值(多个值)

    相关资料:<21天学通Java Web开发> 获得参数的所有参数值(多个值)1.需要使用request对象的getParameterValues()方法. RequestForm4.jsp ...

  3. ios系统中各种设置项的url链接

    ios系统中各种设置项的url链接 在代码中调用如下代码:NSURL*url=[NSURL URLWithString:@"prefs:root=WIFI"];[[UIApplic ...

  4. jQuery笔记二——基础/动画

    1. jQuery的基础语法: $(selector).action() 2. 很多jQuery的语句放在ready里面 $(document).ready(function(){ // jQuery ...

  5. 首部讲Python爬虫电子书 Web Scraping with Python

    首部python爬虫的电子书2015.6pdf<web scraping with python> http://pan.baidu.com/s/1jGL625g 可直接下载 waterm ...

  6. 使用FineReport打造考试分析系统

    本系统的优点: 1.报表内容丰富:系统中包含总分分析.小分分析.作答错因分析.试卷命题分析和各类用户报告单五类报表.涵盖学校须要的各项分析数据,并提供丰富的图表,使分析数据更直观表现. 2.操作灵活简 ...

  7. Android Studio生成keystore签名文件步骤讲解

    Android App打包时要用到签名文件,Android Studio生成签名文件步骤如下: Build---Generate Signed Apk...如图: 如果你的project中有2个或者2 ...

  8. css关于定位那些事情

    css绝对定位.相对定位和文档流的那些事 前言 接触html.和css时间也不短了,但每次用div+css布局的时候心里还是有点儿虚,有时候干脆就直接用table算了,很多时候用div会出现些不可预料 ...

  9. 超级简单却不知道:html标签的嵌套规则

    XHTML的标签有许多:div.ul.li.dl.dt.dd.h1~h6.p.a.addressa.span. strong……我们在运用这些标签搭建页面结构的时候,是可以将它们无限嵌套的,但是,嵌套 ...

  10. .NET Framework posters with Namespaces & Types

    Framework is platform containing a huge library of types, methods, classes, etc., cataloged into nam ...