protected override void OnApplyTemplate()
        {
            Indicator = (ProgressBarRingSlice)GetTemplateChild("Indicator");
            Rotation  = (RotateTransform)GetTemplateChild("Rotation");

            if (Indicator != null)
            {
                OnApplyLegacyTemplate();
            }
            else if (ApiInfo.CanUseDirectComposition)
            {
                var ellipse = Window.Current.Compositor.CreateEllipseGeometry();
                ellipse.Radius  = new Vector2(21);
                ellipse.Center  = new Vector2(24);
                ellipse.TrimEnd = 0f;

                var shape = Window.Current.Compositor.CreateSpriteShape(ellipse);
                shape.CenterPoint     = new Vector2(24);
                shape.StrokeThickness = 2;
                shape.StrokeBrush     = Window.Current.Compositor.CreateColorBrush(Windows.UI.Colors.Red);
                shape.StrokeStartCap  = CompositionStrokeCap.Round;
                shape.StrokeEndCap    = CompositionStrokeCap.Round;

                var visual = Window.Current.Compositor.CreateShapeVisual();
                visual.Shapes.Add(shape);
                visual.Size        = new Vector2(48);
                visual.CenterPoint = new Vector3(24);

                var easing  = Window.Current.Compositor.CreateLinearEasingFunction();
                var forever = Window.Current.Compositor.CreateScalarKeyFrameAnimation();
                forever.InsertKeyFrame(1, 360, easing);
                forever.IterationBehavior = AnimationIterationBehavior.Forever;
                forever.Duration          = TimeSpan.FromSeconds(3);

                var trimEnd = Window.Current.Compositor.CreateScalarKeyFrameAnimation();
                trimEnd.Target = nameof(CompositionGeometry.TrimEnd);
                trimEnd.InsertExpressionKeyFrame(1.0f, "this.FinalValue", Window.Current.Compositor.CreateLinearEasingFunction());

                var visibility = Window.Current.Compositor.CreateExpressionAnimation("target.TrimEnd < 1");
                visibility.SetReferenceParameter("target", ellipse);

                var animations = Window.Current.Compositor.CreateImplicitAnimationCollection();
                animations[nameof(CompositionGeometry.TrimEnd)] = trimEnd;

                ellipse.ImplicitAnimations = animations;
                visual.StartAnimation("IsVisible", visibility);
                visual.StartAnimation("RotationAngleInDegrees", forever);

                _ellipse = ellipse;

                ElementCompositionPreview.SetElementChildVisual(this, visual);
            }
        }
示例#2
0
        protected override void OnApplyTemplate()
        {
            Visibility = Windows.UI.Xaml.Visibility.Collapsed;

            Indicator = (ProgressBarRingSlice)GetTemplateChild("Indicator");
            Rotation  = (RotateTransform)GetTemplateChild("Rotation");

            if (Rotation != null)
            {
                _foreverStoryboard = new Storyboard();
                _foreverStoryboard.RepeatBehavior = RepeatBehavior.Forever;
                var rotationAnimation = new DoubleAnimation();
                rotationAnimation.From     = 0;
                rotationAnimation.To       = 360;
                rotationAnimation.Duration = TimeSpan.FromSeconds(3.0);

                Storyboard.SetTarget(rotationAnimation, Rotation);
                Storyboard.SetTargetProperty(rotationAnimation, "(RotateTransform.Angle)");

                _foreverStoryboard.Children.Add(rotationAnimation);
                _foreverStoryboard.Completed += OnForeverStoryboardCompleted;

                _angleStoryboard = new Storyboard();
                var angleAnimation = new DoubleAnimation();
                angleAnimation.Duration = TimeSpan.FromSeconds(0.25);
                angleAnimation.EnableDependentAnimation = true;

                Storyboard.SetTarget(angleAnimation, Indicator);
                Storyboard.SetTargetProperty(angleAnimation, "EndAngle");

                _angleStoryboard.Children.Add(angleAnimation);
                _angleStoryboard.Completed += OnAngleStoryboardCompleted;

                Loaded += (s, args) =>
                {
                    _foreverStoryboard.RepeatBehavior = RepeatBehavior.Forever;
                    _foreverStoryboard.Begin();
                };
                Unloaded += (s, args) =>
                {
                    _foreverStoryboard.RepeatBehavior = new RepeatBehavior(1);
                    _foreverStoryboard.Stop();
                };
            }
            else
            {
                Indicator.EndAngle = 359;
            }

            OnValueChanged(0, Value);
        }
示例#3
0
        protected override void OnApplyTemplate()
        {
            Visibility = Windows.UI.Xaml.Visibility.Collapsed;

            Indicator          = (ProgressBarRingSlice)GetTemplateChild("Indicator");
            Indicator.EndAngle = 359;

            _angleStoryboard = new Storyboard();
            var angleAnimation = new DoubleAnimation();

            angleAnimation.Duration = TimeSpan.FromSeconds(0.25);
            angleAnimation.EnableDependentAnimation = true;

            Storyboard.SetTarget(angleAnimation, Indicator);
            Storyboard.SetTargetProperty(angleAnimation, "StartAngle");

            _angleStoryboard.Children.Add(angleAnimation);
            _angleStoryboard.Completed += OnAngleStoryboardCompleted;

            OnValueChanged(Value);
        }