首页 > 代码库 > 【WP8】仿QQ提示消息
【WP8】仿QQ提示消息
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(255, 255, 144, 0); private static readonly Color defaultBackgroundColor = Colors.White; public static void Show(string text, Action complete = null, double height = 40) { Show(text, defaultForegroundColor, defaultBackgroundColor, complete, height); } public static void Show(string text, Color foregroundColor, Color backgroundColor, Action complete = null, double height = 40) { 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 = 40) { 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(10, 0, 0, 0) } } }; Show(p, complete, height); } private static void Show(Popup popup, Action complete = null, double height = 40) { 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[0])); storyboard.Children.Add(doubleAnimaionUsingKeyFrames); //0.5秒透明度从0-1 var doubleKeyFrame = new EasingDoubleKeyFrame { KeyTime = KeyTime.FromTimeSpan(TimeSpan.FromSeconds(0.5)), Value = 1, 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(3)), 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[0])); storyboard.Children.Add(doubleAnimaionUsingKeyFrames); doubleKeyFrame = new EasingDoubleKeyFrame { KeyTime = KeyTime.FromTimeSpan(TimeSpan.FromSeconds(0.5)), Value = 0, EasingFunction = new CubicEase { EasingMode = EasingMode.EaseOut } }; doubleAnimaionUsingKeyFrames.KeyFrames.Add(doubleKeyFrame); doubleKeyFrame = new EasingDoubleKeyFrame { KeyTime = KeyTime.FromTimeSpan(TimeSpan.FromSeconds(2.4)), Value = 0, }; doubleAnimaionUsingKeyFrames.KeyFrames.Add(doubleKeyFrame); doubleKeyFrame = new EasingDoubleKeyFrame { KeyTime = KeyTime.FromTimeSpan(TimeSpan.FromSeconds(3)), 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[0])); storyboard.Children.Add(objectAnimaionUsingKeyFrames); var discreteObjectKeyFrame = new DiscreteObjectKeyFrame { KeyTime = KeyTime.FromTimeSpan(TimeSpan.FromSeconds(0)), Value = true }; objectAnimaionUsingKeyFrames.KeyFrames.Add(discreteObjectKeyFrame); discreteObjectKeyFrame = new DiscreteObjectKeyFrame { KeyTime = KeyTime.FromTimeSpan(TimeSpan.FromSeconds(3)), Value = false }; objectAnimaionUsingKeyFrames.KeyFrames.Add(discreteObjectKeyFrame); if (complete!=null) { storyboard.Completed += (s, e) => complete.Invoke(); } storyboard.Begin(); } }}
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。