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;
if ((ValidSpinDirection & valid) != valid)
{
// spin is not allowed.
throw new InvalidOperationException("Spin action is not valid at this moment.");
}
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) { }
}
}