zoukankan      html  css  js  c++  java
  • <wp8>_______关键帧动画(DoubleAnimationUsingKeyFrames)、自定义对话框

    <UserControl x:Class="CustCtrlClassLibrary.PopupView"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        FontFamily="{StaticResource PhoneFontFamilyNormal}"
        FontSize="{StaticResource PhoneFontSizeNormal}"
        Foreground="{StaticResource PhoneForegroundBrush}"
        d:DesignHeight="480" d:DesignWidth="480" mc:Ignorable="d">
    
        <Grid x:Name="LayoutRoot">
            <Rectangle x:Name="mask" Fill="{StaticResource PhoneForegroundBrush}" Opacity="0" MouseLeftButtonDown="mask_MouseLeftButtonDown"/>
            <Grid x:Name="popupArea" VerticalAlignment="Center">
                <Grid.RenderTransform>
                    <CompositeTransform x:Name="popupTransform"/>
                </Grid.RenderTransform>
                <Grid x:Name="contentArea" RenderTransformOrigin="0.5,0.5" Background="{StaticResource PhoneBackgroundBrush}">
                    <Grid.RenderTransform>
                        <CompositeTransform/>
                    </Grid.RenderTransform>
                </Grid>
            </Grid>
        </Grid>
        
    </UserControl>
    using System;
    using System.Windows;
    using System.Windows.Media;
    using System.Windows.Input;
    using Microsoft.Phone.Shell;
    using System.Windows.Controls;
    using Microsoft.Phone.Controls;
    using System.Windows.Media.Animation;
    using System.Windows.Controls.Primitives;
    
    namespace CustCtrlClassLibrary
    {
        public partial class PopupView : UserControl
        {
            #region Constructor
            private bool IsAutoClose = true;
            private int storyType = 0;
    
            public PopupView(PhoneApplicationPage basePage, bool isAutoClose, int storytype = 0)
            {
                InitializeComponent();
                this.Loaded += new RoutedEventHandler(PopupCotainer_Loaded);
                _BasePage = basePage; IsAutoClose = isAutoClose; storyType = storytype;
                _BasePage.BackKeyPress += BasePage_BackKeyPress;
            }
    
            #endregion
    
            #region Property
    
            private PhoneApplicationPage _BasePage;
            private FrameworkElement _PopupContent { get; set; }
            Popup _Popup;
            CubicEase _EasingFunction = new CubicEase() { EasingMode = EasingMode.EaseInOut };
    
            public bool IsShown
            {
                get
                {
                    return _Popup.IsOpen;
                }
            }
    
            #endregion
    
            #region Private Method
    
            private void PopupCotainer_Loaded(object sender, RoutedEventArgs e)
            {
                if (_BasePage.ApplicationBar != null)
                    _BasePage.ApplicationBar.IsVisible = false;
                if (storyType == 0) {
                    PrepareShowStory().Begin();
                } else if (storyType == 1) {
                    LaunchDialog().Begin();
                }
            }
    
            private void BasePage_BackKeyPress(object sender, System.ComponentModel.CancelEventArgs e)
            {
                this.Close();
                e.Cancel = true;
            }
    
            private Storyboard PrepareShowStory()
            {
                contentArea.Children.Add(_PopupContent);
                UpdateLayout();
    
                Storyboard story = new Storyboard();
                DoubleAnimation animation;
                animation = new DoubleAnimation();
                animation.From = 0 - popupArea.ActualHeight;
                animation.To = SystemTray.IsVisible ? 32 : 0;
                animation.Duration = new Duration(TimeSpan.FromMilliseconds(300));
                animation.EasingFunction = _EasingFunction;
                Storyboard.SetTarget(animation, popupTransform);
                Storyboard.SetTargetProperty(animation, new PropertyPath("TranslateY"));
                story.Children.Add(animation);
    
                animation = new DoubleAnimation();
                animation.From = 0;
                animation.To = 0.5;
                animation.Duration = new Duration(TimeSpan.FromMilliseconds(300));
                Storyboard.SetTarget(animation, mask);
                Storyboard.SetTargetProperty(animation, new PropertyPath("(UIElement.Opacity)"));
                story.Children.Add(animation);
    
                return story;
            }
            private Storyboard PrepareCloseStory()
            {
                Storyboard story = new Storyboard();
                DoubleAnimation animation;
    
                story.Completed += new EventHandler(StoryReverse_Completed);
                animation = new DoubleAnimation();
                animation.From = popupTransform.TranslateY;
                animation.To = 0 - popupArea.ActualHeight;
                animation.Duration = new Duration(TimeSpan.FromMilliseconds(300));
                animation.EasingFunction = _EasingFunction;
                Storyboard.SetTarget(animation, popupTransform);
                Storyboard.SetTargetProperty(animation, new PropertyPath("TranslateY"));
                story.Children.Add(animation);
    
                animation = new DoubleAnimation();
                animation.From = mask.Opacity;
                animation.To = 0;
                animation.Duration = new Duration(TimeSpan.FromMilliseconds(300));
                Storyboard.SetTarget(animation, mask);
                Storyboard.SetTargetProperty(animation, new PropertyPath("(UIElement.Opacity)"));
                story.Children.Add(animation);
    
                return story;
            }
    
            private Storyboard LaunchDialog()
            {
                contentArea.Children.Add(_PopupContent);
                UpdateLayout();
    
                //装载DoubleAnimationUsingKeyFrames动画的故事板
                Storyboard keyFrameboard = new Storyboard();
    
                #region 后台代码添加DoubleAnimationUsingKeyFrames动画
                DoubleAnimationUsingKeyFrames dakeyframe = new DoubleAnimationUsingKeyFrames();
                //设置border矩形控件的Opacity透明度,并且开始动画事件为0秒的时候。
                Storyboard.SetTarget(dakeyframe, contentArea);
                Storyboard.SetTargetProperty(dakeyframe, new PropertyPath("UIElement.Opacity"));
                dakeyframe.BeginTime = new TimeSpan(0, 0, 0);
    
                //添加一个在第0.05秒的时候Opacity透明度值为1的关键帧
                SplineDoubleKeyFrame SKeyFrame = new SplineDoubleKeyFrame();
                SKeyFrame.KeyTime = KeyTime.FromTimeSpan(TimeSpan.FromSeconds(0.03));
                SKeyFrame.Value = 1;
                dakeyframe.KeyFrames.Add(SKeyFrame);
    
                keyFrameboard.Children.Add(dakeyframe);
                #endregion
    
                #region 后台代码添加DoubleAnimationUsingKeyFrames动画
                DoubleAnimationUsingKeyFrames dakeyscaleX = new DoubleAnimationUsingKeyFrames();
                //设置border矩形控件的ScaleX透明度,并且开始动画事件为0秒的时候。
                Storyboard.SetTarget(dakeyscaleX, contentArea);
                Storyboard.SetTargetProperty(dakeyscaleX, new PropertyPath("(UIElement.RenderTransform).(CompositeTransform.ScaleX)"));
                dakeyscaleX.BeginTime = new TimeSpan(0, 0, 0);
    
                //添加一个在第0秒的时候ScaleX透明度值为0.5的关键帧
                EasingDoubleKeyFrame EKeyFrameX = new EasingDoubleKeyFrame();
                EKeyFrameX.KeyTime = KeyTime.FromTimeSpan(TimeSpan.FromSeconds(0));
                EKeyFrameX.Value = 0.5;
                dakeyscaleX.KeyFrames.Add(EKeyFrameX);
    
                //添加一个在第0.15秒的时候ScaleX透明度值为1.1的关键帧
                EKeyFrameX = new EasingDoubleKeyFrame();
                EKeyFrameX.KeyTime = KeyTime.FromTimeSpan(TimeSpan.FromSeconds(0.1));
                EKeyFrameX.Value = 1.1;
                dakeyscaleX.KeyFrames.Add(EKeyFrameX);
    
                //添加一个在第0.25秒的时候ScaleX透明度值为0.9的关键帧
                EKeyFrameX = new EasingDoubleKeyFrame();
                EKeyFrameX.KeyTime = KeyTime.FromTimeSpan(TimeSpan.FromSeconds(0.2));
                EKeyFrameX.Value = 0.9;
                dakeyscaleX.KeyFrames.Add(EKeyFrameX);
    
                //添加一个在第0.3秒的时候ScaleX透明度值为0.9的关键帧
                EKeyFrameX = new EasingDoubleKeyFrame();
                EKeyFrameX.KeyTime = KeyTime.FromTimeSpan(TimeSpan.FromSeconds(0.25));
                EKeyFrameX.Value = 1.0;
                dakeyscaleX.KeyFrames.Add(EKeyFrameX);
    
                keyFrameboard.Children.Add(dakeyscaleX);
                #endregion
    
                #region 后台代码添加DoubleAnimationUsingKeyFrames动画
                DoubleAnimationUsingKeyFrames dakeyscaleY = new DoubleAnimationUsingKeyFrames();
                //设置border矩形控件的ScaleY透明度,并且开始动画事件为0秒的时候。
                Storyboard.SetTarget(dakeyscaleY, contentArea);
                Storyboard.SetTargetProperty(dakeyscaleY, new PropertyPath("(UIElement.RenderTransform).(CompositeTransform.ScaleY)"));
                dakeyscaleY.BeginTime = new TimeSpan(0, 0, 0);
    
                //添加一个在第0秒的时候ScaleX透明度值为0.5的关键帧
                EasingDoubleKeyFrame EKeyFrameY = new EasingDoubleKeyFrame();
                EKeyFrameY.KeyTime = KeyTime.FromTimeSpan(TimeSpan.FromSeconds(0));
                EKeyFrameY.Value = 0.5;
                dakeyscaleY.KeyFrames.Add(EKeyFrameY);
    
                //添加一个在第0.15秒的时候ScaleX透明度值为1.1的关键帧
                EKeyFrameY = new EasingDoubleKeyFrame();
                EKeyFrameY.KeyTime = KeyTime.FromTimeSpan(TimeSpan.FromSeconds(0.1));
                EKeyFrameY.Value = 1.1;
                dakeyscaleY.KeyFrames.Add(EKeyFrameY);
    
                //添加一个在第0.25秒的时候ScaleX透明度值为0.9的关键帧
                EKeyFrameY = new EasingDoubleKeyFrame();
                EKeyFrameY.KeyTime = KeyTime.FromTimeSpan(TimeSpan.FromSeconds(0.2));
                EKeyFrameY.Value = 0.9;
                dakeyscaleY.KeyFrames.Add(EKeyFrameY);
    
                //添加一个在第0.3秒的时候ScaleX透明度值为0.9的关键帧
                EKeyFrameY = new EasingDoubleKeyFrame();
                EKeyFrameY.KeyTime = KeyTime.FromTimeSpan(TimeSpan.FromSeconds(0.25));
                EKeyFrameY.Value = 1.0;
                dakeyscaleY.KeyFrames.Add(EKeyFrameY);
    
                keyFrameboard.Children.Add(dakeyscaleY);
                #endregion
    
                return keyFrameboard;
            }
            private Storyboard CloseDialog()
            {
                Storyboard keyFrameboard = new Storyboard();
                keyFrameboard.Completed += new EventHandler(StoryReverse_Completed);
    
                DoubleAnimation animation = new DoubleAnimation();
                //设置border矩形控件的Opacity透明度,并且开始动画事件为0秒的时候。
                Storyboard.SetTarget(animation, contentArea);
                Storyboard.SetTargetProperty(animation, new PropertyPath("UIElement.Opacity"));
    
                animation.From = 1; animation.To = 0.1;
                animation.Duration = new Duration(TimeSpan.FromSeconds(0.1));
    
                keyFrameboard.Children.Add(animation);
    
                return keyFrameboard;
            }
    
            private void StoryReverse_Completed(object sender, EventArgs e)
            {
                ClosePopup();
            }
    
            private void ClosePopup()
            {
                contentArea.Children.Clear();
                _PopupContent = null;
                _BasePage = null;
    
                Popup parent = this.Parent as Popup;
                if (parent != null)
                {
                    parent.IsOpen = false;
                }
            }
    
            private void mask_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
            {
                if (IsAutoClose)
                    Close();
            }
    
            #endregion
    
            #region Public Method
    
            public void Show(FrameworkElement popupContent)
            {
                _PopupContent = popupContent;
                _Popup = new Popup();
                _Popup.Child = this;
                _Popup.IsOpen = true;
            }
    
            public event PopUpClosed nPopUpClosed;
    
            public void Close()
            {
                _BasePage.BackKeyPress -= BasePage_BackKeyPress;
                if (storyType == 0) {
                    PrepareCloseStory().Begin();
                } else if (storyType == 1) {
                    CloseDialog().Begin();
                }
                if (_BasePage.ApplicationBar != null)
                    _BasePage.ApplicationBar.IsVisible = true;
                if (nPopUpClosed != null)
                    nPopUpClosed();
            }
    
            #endregion
    
            public void SetBackgroundColor(Brush aBrush)
            {
                contentArea.Background = aBrush;
            }
        }
    }
    CustCtrl parm = new CustCtrl();
    PopupView pc = new PopupView(this, false, 1);
    pc.Height = this.ActualHeight; pc.Width = this.ActualWidth;
    SolidColorBrush nBrush = new SolidColorBrush(Color.FromArgb(25, 68, 68, 68));
    pc.SetBackgroundColor(nBrush); 
    pc.Show(parm);
  • 相关阅读:
    [arXiv18]更快的基于非二叉化自底向上策略的转移系统成分句法分析
    [AAAI18]面向序列建模的元多任务学习
    [COLING18]两种成分句法分析的局部特征模型
    [ACL18]基于RNN和动态规划的线性时间成分句法分析
    成分句法分析综述
    [NAACL16]RNN文法
    [TACL17]基于中序转移的成分句法分析
    K-摇臂赌博机算法与实现
    关于JVM案例分析(四)
    关于JVM案例分析(三)
  • 原文地址:https://www.cnblogs.com/qq278360339/p/2988611.html
Copyright © 2011-2022 走看看