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); } }
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); }
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); }