コード例 #1
0
        private static void DoOpacityTransition(
            IOpacityParams transitionParams,
            FrameworkElement target,
            RoutedEventHandler onLoaded,
            Visibility?visibility)
        {
            var reverse = Transitionz.IsVisibilityHidden(visibility);

            target.Opacity = reverse ? transitionParams.To : transitionParams.From;

            if (onLoaded != null && Transitionz.HasFlag(transitionParams.TransitionOn, TransitionOn.Once))
            {
                target.Loaded -= onLoaded;
            }

            var a = new DoubleAnimation
            {
                From           = reverse ? transitionParams.To : transitionParams.From,
                To             = reverse ? transitionParams.From : transitionParams.To,
                FillBehavior   = transitionParams.FillBehavior,
                BeginTime      = TimeSpan.FromMilliseconds(transitionParams.BeginTime),
                Duration       = new Duration(TimeSpan.FromMilliseconds(transitionParams.Duration)),
                EasingFunction = reverse ? (transitionParams.ReverseEase ?? transitionParams.Ease) : transitionParams.Ease,
                AutoReverse    = transitionParams.AutoReverse,
            };

            // Directly adding RepeatBehavior to constructor breaks existing animations, so only add it if properly defined
            if (transitionParams.RepeatBehavior == RepeatBehavior.Forever ||
                transitionParams.RepeatBehavior.HasDuration ||
                (transitionParams.RepeatBehavior.HasDuration && transitionParams.RepeatBehavior.Count > 0))
            {
                a.RepeatBehavior = transitionParams.RepeatBehavior;
            }

            a.SetDesiredFrameRate(24);

            var storyboard = new Storyboard();

            storyboard.Children.Add(a);
            Storyboard.SetTarget(a, target);
            Storyboard.SetTargetProperty(a, new PropertyPath(UIElement.OpacityProperty));

            a.Completed += (_, __) =>
            {
                if (visibility.HasValue)
                {
                    target.Visibility = visibility.Value;
                }
                target.Opacity = reverse ? transitionParams.From : transitionParams.To;
                storyboard.Stop();
            };
            storyboard.Begin();
        }
コード例 #2
0
 public static void SetOpacity(UIElement element, IOpacityParams value)
 {
     element.SetValue(OpacityProperty, value);
 }