123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173 |
- namespace UICommon;
- [TemplateVisualState(Name = "Large", GroupName = "SizeStates")]
- [TemplateVisualState(Name = "Small", GroupName = "SizeStates")]
- [TemplateVisualState(Name = "Inactive", GroupName = "ActiveStates")]
- [TemplateVisualState(Name = "Active", GroupName = "ActiveStates")]
- public class CycleRingLoading : Control
- {
- static CycleRingLoading()
- {
- DefaultStyleKeyProperty.OverrideMetadata(typeof(CycleRingLoading), new FrameworkPropertyMetadata(typeof(CycleRingLoading)));
- VisibilityProperty.OverrideMetadata(typeof(CycleRingLoading), new FrameworkPropertyMetadata(delegate (DependencyObject ringObject, DependencyPropertyChangedEventArgs e)
- {
- bool flag = e.NewValue != e.OldValue;
- if (flag)
- {
- CycleRingLoading CycleRingLoading = (CycleRingLoading)ringObject;
- bool flag2 = (Visibility)e.NewValue > Visibility.Visible;
- if (flag2)
- {
- CycleRingLoading.SetCurrentValue(IsActiveProperty, false);
- }
- else
- {
- CycleRingLoading.IsActive = true;
- }
- }
- }));
- }
- public CycleRingLoading()
- {
- SizeChanged += (s, e) =>
- {
- BindableWidth = ActualWidth;
- };
- Unloaded += CycleRingLoading_Unloaded;
- }
- public static readonly DependencyProperty BindableWidthProperty = DependencyProperty.Register("BindableWidth", typeof(double), typeof(CycleRingLoading), new PropertyMetadata(0.0, new PropertyChangedCallback(BindableWidthCallback)));
- public static readonly DependencyProperty IsActiveProperty = DependencyProperty.Register("IsActive", typeof(bool), typeof(CycleRingLoading), new FrameworkPropertyMetadata(true, FrameworkPropertyMetadataOptions.BindsTwoWayByDefault, new PropertyChangedCallback(IsActiveChanged)));
- public static readonly DependencyProperty IsLargeProperty = DependencyProperty.Register("IsLarge", typeof(bool), typeof(CycleRingLoading), new PropertyMetadata(true, new PropertyChangedCallback(IsLargeChangedCallback)));
- public static readonly DependencyProperty MaxSideLengthProperty = DependencyProperty.Register("MaxSideLength", typeof(double), typeof(CycleRingLoading), new PropertyMetadata(0.0));
- public static readonly DependencyProperty EllipseDiameterProperty = DependencyProperty.Register("EllipseDiameter", typeof(double), typeof(CycleRingLoading), new PropertyMetadata(0.0));
- public static readonly DependencyProperty EllipseOffsetProperty = DependencyProperty.Register("EllipseOffset", typeof(Thickness), typeof(CycleRingLoading), new PropertyMetadata(default(Thickness)));
- private string StateActive = "Active";
- private string StateInActive = "InActive";
- private string StateLarge = "Large";
- private string StateSmall = "Small";
- public override void OnApplyTemplate()
- {
- base.OnApplyTemplate();
- UpdateLargeState();
- UpdateActiveState();
- }
- public double BindableWidth
- {
- get => (double)GetValue(BindableWidthProperty);
- private set => SetValue(BindableWidthProperty, value);
- }
- private static void BindableWidthCallback(DependencyObject dependencyObject, DependencyPropertyChangedEventArgs e)
- {
- if (dependencyObject is not CycleRingLoading CycleRingLoading)
- return;
- bool flag = CycleRingLoading == null;
- if (!flag)
- {
- CycleRingLoading!.SetEllipseDiameter((double)e.NewValue);
- CycleRingLoading.SetEllipseOffset((double)e.NewValue);
- CycleRingLoading.SetMaxSideLength((double)e.NewValue);
- }
- }
- private void SetEllipseDiameter(double width) => EllipseDiameter = width / 8.0;
- private void SetEllipseOffset(double width) => EllipseOffset = new Thickness(0.0, width / 2.0, 0.0, 0.0);
- private void SetMaxSideLength(double width) => MaxSideLength = width <= 20.0 ? 20.0 : width;
- public bool IsActive
- {
- get => (bool)GetValue(IsActiveProperty);
- set => SetValue(IsActiveProperty, value);
- }
- private static void IsActiveChanged(DependencyObject sender, DependencyPropertyChangedEventArgs e)
- {
- if (sender is CycleRingLoading CycleRingLoading)
- {
- bool flag = CycleRingLoading == null;
- if (!flag)
- CycleRingLoading!.UpdateActiveState();
- }
- }
- private void UpdateActiveState()
- {
- bool isActive = IsActive;
- if (isActive)
- VisualStateManager.GoToState(this, StateActive, true);
- else
- VisualStateManager.GoToState(this, StateInActive, true);
- }
- public bool IsLarge
- {
- get => (bool)GetValue(IsLargeProperty);
- set => SetValue(IsLargeProperty, value);
- }
- private static void IsLargeChangedCallback(DependencyObject sender, DependencyPropertyChangedEventArgs e)
- {
- if (sender is not CycleRingLoading CycleRingLoading || CycleRingLoading is null)
- return;
- bool flag = CycleRingLoading == null;
- if (!flag)
- CycleRingLoading!.UpdateLargeState();
- }
- private void UpdateLargeState()
- {
- bool isLarge = IsLarge;
- if (isLarge)
- VisualStateManager.GoToState(this, StateLarge, true);
- else
- VisualStateManager.GoToState(this, StateSmall, true);
- }
- private void CycleRingLoading_Unloaded(object sender, RoutedEventArgs e)
- {
- IsActive = false;
- }
- public double MaxSideLength
- {
- get => (double)GetValue(MaxSideLengthProperty);
- set => SetValue(MaxSideLengthProperty, value);
- }
- public double EllipseDiameter
- {
- get => (double)GetValue(EllipseDiameterProperty);
- set => SetValue(EllipseDiameterProperty, value);
- }
- public Thickness EllipseOffset
- {
- get => (Thickness)GetValue(EllipseOffsetProperty);
- set => SetValue(EllipseOffsetProperty, value);
- }
- }
|