/// <summary> /// Implementation of <see cref="System.Windows.Freezable.CloneCore(System.Windows.Freezable)">Freezable.CloneCore</see>. /// </summary> protected override void CloneCore(Freezable sourceFreezable) { Int32AnimationUsingKeyFrames sourceAnimation = (Int32AnimationUsingKeyFrames)sourceFreezable; base.CloneCore(sourceFreezable); CopyCommon(sourceAnimation, /* isCurrentValueClone = */ false); }
protected override void OnClosing(System.ComponentModel.CancelEventArgs e) { if (IsClosing) { e.Cancel = !AllowClose; } else { IsClosing = true; AllowClose = false; e.Cancel = true; if (PopupBoard is Storyboard) { PopupBoard.Stop(this); PopupBoard = null; } HideBoard = new Storyboard(); HideBoard.Completed += new EventHandler((od, ed) => { AllowClose = true; Close(); }); var rect = DockIcon.IconRect; var delay = Config.HideDelay; if ((System.Windows.Forms.Control.ModifierKeys & System.Windows.Forms.Keys.Shift) == System.Windows.Forms.Keys.Shift) { delay = 5000; } for (var i = 0; i < spContent.Children.Count; i++) { var ctrl = spContent.Children[i] as FanIconControl; ctrl.GridContent.Effect = null; var animRotate = new DoubleAnimationUsingKeyFrames(); animRotate.SetValue(Storyboard.TargetNameProperty, ctrl.Name); animRotate.SetValue(Storyboard.TargetPropertyProperty, new PropertyPath("(UIElement.RenderTransform).(TransformGroup.Children)[0].(RotateTransform.Angle)")); animRotate.KeyFrames.Add(new SplineDoubleKeyFrame(0, KeyTime.FromTimeSpan(TimeSpan.FromMilliseconds(delay)))); animRotate.DecelerationRatio = 0.8; var animMargin = new ThicknessAnimationUsingKeyFrames(); animMargin.SetValue(Storyboard.TargetNameProperty, ctrl.Name); animMargin.SetValue(Storyboard.TargetPropertyProperty, new PropertyPath("(FrameworkElement.Margin)")); animMargin.KeyFrames.Add(new SplineThicknessKeyFrame( new Thickness(0), KeyTime.FromTimeSpan(TimeSpan.FromMilliseconds(delay)))); animMargin.DecelerationRatio = 0.8; var animOpacity = new DoubleAnimationUsingKeyFrames(); animOpacity.SetValue(Storyboard.TargetNameProperty, ctrl.BorderTitle.Tag); animOpacity.SetValue(Storyboard.TargetPropertyProperty, new PropertyPath("(FrameworkElement.Opacity)")); animOpacity.KeyFrames.Add(new SplineDoubleKeyFrame(0, KeyTime.FromTimeSpan(TimeSpan.FromMilliseconds(delay)))); animOpacity.DecelerationRatio = 1; var animIconSize = new Int32AnimationUsingKeyFrames(); animIconSize.SetValue(Storyboard.TargetNameProperty, ctrl.Name); animIconSize.SetValue(Storyboard.TargetPropertyProperty, new PropertyPath("(FrameworkElement.IconSize)")); animIconSize.KeyFrames.Add(new SplineInt32KeyFrame(rect.Width, KeyTime.FromTimeSpan(TimeSpan.FromMilliseconds(delay)))); animIconSize.DecelerationRatio = 1; HideBoard.Children.Add(animRotate); HideBoard.Children.Add(animMargin); HideBoard.Children.Add(animOpacity); HideBoard.Children.Add(animIconSize); } HideBoard.Begin(this); } base.OnClosing(e); }
private void Window_Activated(object sender, EventArgs e) { if (IsClosing || IsOpened) { return; } IsOpened = true; DockIcon.IconName = App.StartupPath + "Container-Opened.png"; PopupBoard = new Storyboard(); PopupBoard.Completed += new EventHandler(PopupAnimation_Completed); var rect = DockIcon.IconRect; var delay = Config.PopupDelay; if ((System.Windows.Forms.Control.ModifierKeys & System.Windows.Forms.Keys.Shift) == System.Windows.Forms.Keys.Shift) { delay = 5000; } for (var i = 0; i < spContent.Children.Count; i++) { var ctrl = spContent.Children[i] as FanIconControl; var k = (double)(spContent.Children.Count - 1 - i) / MaxItems; var animRotate = new DoubleAnimationUsingKeyFrames(); animRotate.SetValue(Storyboard.TargetNameProperty, ctrl.Name); animRotate.SetValue(Storyboard.TargetPropertyProperty, new PropertyPath("(UIElement.RenderTransform).(TransformGroup.Children)[0].(RotateTransform.Angle)")); animRotate.KeyFrames.Add(new SplineDoubleKeyFrame(k * Angle, KeyTime.FromTimeSpan(TimeSpan.FromMilliseconds(delay)))); animRotate.DecelerationRatio = 0.8; var animMargin = new ThicknessAnimationUsingKeyFrames(); animMargin.SetValue(Storyboard.TargetNameProperty, ctrl.Name); animMargin.SetValue(Storyboard.TargetPropertyProperty, new PropertyPath("(FrameworkElement.Margin)")); animMargin.KeyFrames.Add(new SplineThicknessKeyFrame( new Thickness(0, 0, -IconSize / 2 * (1 - Math.Sin((1 - k) * Math.PI / 2)) - (IconSize - rect.Width) / 2, rect.Height + IconSize * (spContent.Children.Count - 1 - i)), KeyTime.FromTimeSpan(TimeSpan.FromMilliseconds(delay)))); animMargin.DecelerationRatio = 0.8; var animOpacity = new DoubleAnimationUsingKeyFrames(); animOpacity.SetValue(Storyboard.TargetNameProperty, ctrl.BorderTitle.Tag); animOpacity.SetValue(Storyboard.TargetPropertyProperty, new PropertyPath("(FrameworkElement.Opacity)")); animOpacity.KeyFrames.Add(new SplineDoubleKeyFrame(1, KeyTime.FromTimeSpan(TimeSpan.FromMilliseconds(delay)))); animOpacity.DecelerationRatio = 1; var animIconSize = new Int32AnimationUsingKeyFrames(); animIconSize.SetValue(Storyboard.TargetNameProperty, ctrl.Name); animIconSize.SetValue(Storyboard.TargetPropertyProperty, new PropertyPath("(FrameworkElement.IconSize)")); animIconSize.KeyFrames.Add(new SplineInt32KeyFrame(rect.Width, KeyTime.FromTimeSpan(TimeSpan.FromMilliseconds(0)))); animIconSize.KeyFrames.Add(new SplineInt32KeyFrame(IconSize, KeyTime.FromTimeSpan(TimeSpan.FromMilliseconds(delay)))); animIconSize.DecelerationRatio = 1; PopupBoard.Children.Add(animRotate); PopupBoard.Children.Add(animMargin); PopupBoard.Children.Add(animOpacity); PopupBoard.Children.Add(animIconSize); } PopupBoard.Begin(this); }
/// <summary> /// Helper used by the four Freezable clone methods to copy the resolved key times and /// key frames. The Get*AsFrozenCore methods are implemented the same as the Clone*Core /// methods; Get*AsFrozen at the top level will recursively Freeze so it's not done here. /// </summary> /// <param name="sourceAnimation"></param> /// <param name="isCurrentValueClone"></param> private void CopyCommon(Int32AnimationUsingKeyFrames sourceAnimation, bool isCurrentValueClone) { _areKeyTimesValid = sourceAnimation._areKeyTimesValid; if ( _areKeyTimesValid && sourceAnimation._sortedResolvedKeyFrames != null) { // _sortedResolvedKeyFrames is an array of ResolvedKeyFrameEntry so the notion of CurrentValueClone doesn't apply _sortedResolvedKeyFrames = (ResolvedKeyFrameEntry[])sourceAnimation._sortedResolvedKeyFrames.Clone(); } if (sourceAnimation._keyFrames != null) { if (isCurrentValueClone) { _keyFrames = (Int32KeyFrameCollection)sourceAnimation._keyFrames.CloneCurrentValue(); } else { _keyFrames = (Int32KeyFrameCollection)sourceAnimation._keyFrames.Clone(); } OnFreezablePropertyChanged(null, _keyFrames); } }
private Storyboard CreatePromoteStoryboard(UIElement uiElement) { var sb = new Storyboard(); var vertAnimation = new DoubleAnimationUsingKeyFrames(); Storyboard.SetTarget(vertAnimation, uiElement); Storyboard.SetTargetProperty(vertAnimation, new PropertyPath(Canvas.TopProperty)); var newY = Canvas.GetTop(uiElement) - VerticalItemOffset; vertAnimation.KeyFrames.Add(new SplineDoubleKeyFrame(newY, ItemTransitionDuration)); var horizAnimation = new DoubleAnimationUsingKeyFrames(); Storyboard.SetTarget(horizAnimation, uiElement); Storyboard.SetTargetProperty(horizAnimation, new PropertyPath(Canvas.LeftProperty)); var newX = Canvas.GetLeft(uiElement) - HorizontalItemOffset; horizAnimation.KeyFrames.Add(new SplineDoubleKeyFrame(newX, ItemTransitionDuration)); var zindexAnimation = new Int32AnimationUsingKeyFrames(); zindexAnimation.BeginTime = ItemTransitionDuration + TimeSpan.FromMilliseconds(1); Storyboard.SetTarget(zindexAnimation, uiElement); Storyboard.SetTargetProperty(zindexAnimation, new PropertyPath(Canvas.ZIndexProperty)); var newZidx = Canvas.GetZIndex(uiElement) + 1; zindexAnimation.KeyFrames.Add(new SplineInt32KeyFrame(newZidx, TimeSpan.Zero)); sb.Children.Add(vertAnimation); sb.Children.Add(horizAnimation); sb.Children.Add(zindexAnimation); return sb; }
private Storyboard CreateRemoveStoryboard(UIElement uiElement) { var sb = new Storyboard(); //If idx==0 animate down and out then zindex to 0or1 //else move up by VertOffSet and left by HorOffset, then ZIndex++; var vertAnimation = new DoubleAnimationUsingKeyFrames(); Storyboard.SetTarget(vertAnimation, uiElement); Storyboard.SetTargetProperty(vertAnimation, new PropertyPath(Canvas.TopProperty)); var newY = Items.Count * VerticalItemOffset; vertAnimation.KeyFrames.Add(new SplineDoubleKeyFrame(newY, ItemTransitionDuration)); var horizAnimation = new DoubleAnimationUsingKeyFrames(); Storyboard.SetTarget(horizAnimation, uiElement); Storyboard.SetTargetProperty(horizAnimation, new PropertyPath(Canvas.LeftProperty)); var newX = Items.Count * HorizontalItemOffset; horizAnimation.KeyFrames.Add(new SplineDoubleKeyFrame(newX, ItemTransitionDuration)); var zindexAnimation = new Int32AnimationUsingKeyFrames(); zindexAnimation.BeginTime = ItemTransitionDuration; Storyboard.SetTarget(zindexAnimation, uiElement); Storyboard.SetTargetProperty(zindexAnimation, new PropertyPath(Canvas.ZIndexProperty)); zindexAnimation.KeyFrames.Add(new SplineInt32KeyFrame(0, TimeSpan.Zero)); sb.Children.Add(vertAnimation); sb.Children.Add(horizAnimation); sb.Children.Add(zindexAnimation); return sb; }