136 lines
5.1 KiB
C#
136 lines
5.1 KiB
C#
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;
|
|
|
|
// ReSharper disable once CheckNamespace
|
|
namespace HandyControl.Controls
|
|
{
|
|
public abstract class LoadingBase : ContentControl
|
|
{
|
|
protected Storyboard Storyboard;
|
|
|
|
public static readonly DependencyProperty IsRunningProperty = DependencyProperty.Register(
|
|
"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, value);
|
|
}
|
|
|
|
public static readonly DependencyProperty DotCountProperty = DependencyProperty.Register(
|
|
"DotCount", typeof(int), typeof(LoadingBase),
|
|
new FrameworkPropertyMetadata(5, FrameworkPropertyMetadataOptions.AffectsRender));
|
|
|
|
public static readonly DependencyProperty DotIntervalProperty = DependencyProperty.Register(
|
|
"DotInterval", typeof(double), typeof(LoadingBase),
|
|
new FrameworkPropertyMetadata(10.0, FrameworkPropertyMetadataOptions.AffectsRender));
|
|
|
|
public static readonly DependencyProperty DotBorderBrushProperty = DependencyProperty.Register(
|
|
"DotBorderBrush", typeof(Brush), typeof(LoadingBase),
|
|
new FrameworkPropertyMetadata(default(Brush), FrameworkPropertyMetadataOptions.AffectsRender));
|
|
|
|
public static readonly DependencyProperty DotBorderThicknessProperty = DependencyProperty.Register(
|
|
"DotBorderThickness", typeof(double), typeof(LoadingBase),
|
|
new FrameworkPropertyMetadata(ValueBoxes.Double0Box, FrameworkPropertyMetadataOptions.AffectsRender));
|
|
|
|
public static readonly DependencyProperty DotDiameterProperty = DependencyProperty.Register(
|
|
"DotDiameter", typeof(double), typeof(LoadingBase),
|
|
new FrameworkPropertyMetadata(6.0, FrameworkPropertyMetadataOptions.AffectsRender));
|
|
|
|
public static readonly DependencyProperty DotSpeedProperty = DependencyProperty.Register(
|
|
"DotSpeed", typeof(double), typeof(LoadingBase),
|
|
new FrameworkPropertyMetadata(4.0, FrameworkPropertyMetadataOptions.AffectsRender));
|
|
|
|
public static readonly DependencyProperty DotDelayTimeProperty = DependencyProperty.Register(
|
|
"DotDelayTime", typeof(double), typeof(LoadingBase),
|
|
new FrameworkPropertyMetadata(80.0, FrameworkPropertyMetadataOptions.AffectsRender));
|
|
|
|
protected readonly Canvas PrivateCanvas = new Canvas
|
|
{
|
|
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 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;
|
|
}
|
|
}
|
|
} |