123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135 |
- using System.Windows;
- using System.Windows.Controls;
- using System.Windows.Data;
- using System.Windows.Media;
- using System.Windows.Media.Animation;
- using System.Windows.Shapes;
- using HandyControl.Data;
- namespace HandyControl.Controls;
- public abstract class LoadingBase : ContentControl
- {
- protected Storyboard Storyboard;
- public static readonly DependencyProperty IsRunningProperty = DependencyProperty.Register(
- nameof(IsRunning), typeof(bool), typeof(LoadingBase), new PropertyMetadata(ValueBoxes.TrueBox, (o, args) =>
- {
- var ctl = (LoadingBase) o;
- var v = (bool) args.NewValue;
- if (v)
- {
- ctl.Storyboard?.Resume();
- }
- else
- {
- ctl.Storyboard?.Pause();
- }
- }));
- public bool IsRunning
- {
- get => (bool) GetValue(IsRunningProperty);
- set => SetValue(IsRunningProperty, ValueBoxes.BooleanBox(value));
- }
- public static readonly DependencyProperty DotCountProperty = DependencyProperty.Register(
- nameof(DotCount), typeof(int), typeof(LoadingBase),
- new FrameworkPropertyMetadata(ValueBoxes.Int5Box, FrameworkPropertyMetadataOptions.AffectsRender));
- public static readonly DependencyProperty DotIntervalProperty = DependencyProperty.Register(
- nameof(DotInterval), typeof(double), typeof(LoadingBase),
- new FrameworkPropertyMetadata(ValueBoxes.Double10Box, FrameworkPropertyMetadataOptions.AffectsRender));
- public static readonly DependencyProperty DotBorderBrushProperty = DependencyProperty.Register(
- nameof(DotBorderBrush), typeof(Brush), typeof(LoadingBase),
- new FrameworkPropertyMetadata(default(Brush), FrameworkPropertyMetadataOptions.AffectsRender));
- public static readonly DependencyProperty DotBorderThicknessProperty = DependencyProperty.Register(
- nameof(DotBorderThickness), typeof(double), typeof(LoadingBase),
- new FrameworkPropertyMetadata(ValueBoxes.Double0Box, FrameworkPropertyMetadataOptions.AffectsRender));
- public static readonly DependencyProperty DotDiameterProperty = DependencyProperty.Register(
- nameof(DotDiameter), typeof(double), typeof(LoadingBase),
- new FrameworkPropertyMetadata(6.0, FrameworkPropertyMetadataOptions.AffectsRender));
- public static readonly DependencyProperty DotSpeedProperty = DependencyProperty.Register(
- nameof(DotSpeed), typeof(double), typeof(LoadingBase),
- new FrameworkPropertyMetadata(4.0, FrameworkPropertyMetadataOptions.AffectsRender));
- public static readonly DependencyProperty DotDelayTimeProperty = DependencyProperty.Register(
- nameof(DotDelayTime), typeof(double), typeof(LoadingBase),
- new FrameworkPropertyMetadata(80.0, FrameworkPropertyMetadataOptions.AffectsRender));
- protected readonly Canvas PrivateCanvas = new()
- {
- ClipToBounds = true
- };
- protected LoadingBase()
- {
- Content = PrivateCanvas;
- }
- public int DotCount
- {
- get => (int) GetValue(DotCountProperty);
- set => SetValue(DotCountProperty, value);
- }
- public double DotInterval
- {
- get => (double) GetValue(DotIntervalProperty);
- set => SetValue(DotIntervalProperty, value);
- }
- public Brush DotBorderBrush
- {
- get => (Brush) GetValue(DotBorderBrushProperty);
- set => SetValue(DotBorderBrushProperty, value);
- }
- public double DotBorderThickness
- {
- get => (double) GetValue(DotBorderThicknessProperty);
- set => SetValue(DotBorderThicknessProperty, value);
- }
- public double DotDiameter
- {
- get => (double) GetValue(DotDiameterProperty);
- set => SetValue(DotDiameterProperty, value);
- }
- public double DotSpeed
- {
- get => (double) GetValue(DotSpeedProperty);
- set => SetValue(DotSpeedProperty, value);
- }
- public double DotDelayTime
- {
- get => (double) GetValue(DotDelayTimeProperty);
- set => SetValue(DotDelayTimeProperty, value);
- }
- protected abstract void UpdateDots();
- protected override void OnRender(DrawingContext drawingContext)
- {
- base.OnRender(drawingContext);
- UpdateDots();
- }
- protected virtual Ellipse CreateEllipse(int index)
- {
- var ellipse = new Ellipse();
- ellipse.SetBinding(WidthProperty, new Binding(DotDiameterProperty.Name) { Source = this });
- ellipse.SetBinding(HeightProperty, new Binding(DotDiameterProperty.Name) { Source = this });
- ellipse.SetBinding(Shape.FillProperty, new Binding(ForegroundProperty.Name) { Source = this });
- ellipse.SetBinding(Shape.StrokeThicknessProperty, new Binding(DotBorderThicknessProperty.Name) { Source = this });
- ellipse.SetBinding(Shape.StrokeProperty, new Binding(DotBorderBrushProperty.Name) { Source = this });
- return ellipse;
- }
- }
|