using System; using System.Windows.Controls; using System.Windows; namespace Microsoft.Windows.Controls { /// /// Base class for controls that represents controls that can spin. /// public abstract class Spinner : Control { #region Properties /// /// Identifies the ValidSpinDirection dependency property. /// public static readonly DependencyProperty ValidSpinDirectionProperty = DependencyProperty.Register("ValidSpinDirection", typeof(ValidSpinDirections), typeof(Spinner), new PropertyMetadata(ValidSpinDirections.Increase | ValidSpinDirections.Decrease, OnValidSpinDirectionPropertyChanged)); public ValidSpinDirections ValidSpinDirection { get { return (ValidSpinDirections)GetValue(ValidSpinDirectionProperty); } set { SetValue(ValidSpinDirectionProperty, value); } } /// /// ValidSpinDirectionProperty property changed handler. /// /// ButtonSpinner that changed its ValidSpinDirection. /// Event arguments. private static void OnValidSpinDirectionPropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) { Spinner source = (Spinner)d; ValidSpinDirections oldvalue = (ValidSpinDirections)e.OldValue; ValidSpinDirections newvalue = (ValidSpinDirections)e.NewValue; source.OnValidSpinDirectionChanged(oldvalue, newvalue); } #endregion //Properties /// /// Occurs when spinning is initiated by the end-user. /// public event EventHandler Spin; /// /// Initializes a new instance of the Spinner class. /// protected Spinner() { } /// /// Raises the OnSpin event when spinning is initiated by the end-user. /// /// Spin event args. protected virtual void OnSpin(SpinEventArgs e) { ValidSpinDirections valid = e.Direction == SpinDirection.Increase ? ValidSpinDirections.Increase : ValidSpinDirections.Decrease; //Only raise the event if spin is allowed. if ((ValidSpinDirection & valid) == valid) { EventHandler handler = Spin; if (handler != null) { handler(this, e); } } } /// /// Called when valid spin direction changed. /// /// The old value. /// The new value. protected virtual void OnValidSpinDirectionChanged(ValidSpinDirections oldValue, ValidSpinDirections newValue) { } } }