using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows; using System.Windows.Controls; using System.Windows.Controls.Primitives; using System.Windows.Data; using System.Windows.Documents; using System.Windows.Input; using System.Windows.Media; using System.Windows.Media.Animation; using System.Windows.Media.Imaging; using System.Windows.Navigation; using System.Windows.Shapes; namespace Tango.Touch.Controls { public class TouchToggleSlider : ToggleButton { private Grid _grid_ellipse; static TouchToggleSlider() { DefaultStyleKeyProperty.OverrideMetadata(typeof(TouchToggleSlider), new FrameworkPropertyMetadata(typeof(TouchToggleSlider))); } public CornerRadius CornerRadius { get { return (CornerRadius)GetValue(CornerRadiusProperty); } set { SetValue(CornerRadiusProperty, value); } } public static readonly DependencyProperty CornerRadiusProperty = DependencyProperty.Register("CornerRadius", typeof(CornerRadius), typeof(TouchToggleSlider), new PropertyMetadata(default(CornerRadius))); public Brush ThumbBrush { get { return (Brush)GetValue(ThumbBrushProperty); } set { SetValue(ThumbBrushProperty, value); } } public static readonly DependencyProperty ThumbBrushProperty = DependencyProperty.Register("ThumbBrush", typeof(Brush), typeof(TouchToggleSlider), new PropertyMetadata(null)); public Object UncheckedContent { get { return (Object)GetValue(UncheckedContentProperty); } set { SetValue(UncheckedContentProperty, value); } } public static readonly DependencyProperty UncheckedContentProperty = DependencyProperty.Register("UncheckedContent", typeof(Object), typeof(TouchToggleSlider), new PropertyMetadata(null)); public Object CheckedContent { get { return (Object)GetValue(CheckedContentProperty); } set { SetValue(CheckedContentProperty, value); } } public static readonly DependencyProperty CheckedContentProperty = DependencyProperty.Register("CheckedContent", typeof(Object), typeof(TouchToggleSlider), new PropertyMetadata(null)); public Object UncheckedThumbContent { get { return (Object)GetValue(UncheckedThumbContentProperty); } set { SetValue(UncheckedThumbContentProperty, value); } } public static readonly DependencyProperty UncheckedThumbContentProperty = DependencyProperty.Register("UncheckedThumbContent", typeof(Object), typeof(TouchToggleSlider), new PropertyMetadata(null)); public Object CheckedThumbContent { get { return (Object)GetValue(CheckedThumbContentProperty); } set { SetValue(CheckedThumbContentProperty, value); } } public static readonly DependencyProperty CheckedThumbContentProperty = DependencyProperty.Register("CheckedThumbContent", typeof(Object), typeof(TouchToggleSlider), new PropertyMetadata(null)); public Brush UncheckedBackground { get { return (Brush)GetValue(UncheckedBackgroundProperty); } set { SetValue(UncheckedBackgroundProperty, value); } } public static readonly DependencyProperty UncheckedBackgroundProperty = DependencyProperty.Register("UncheckedBackground", typeof(Brush), typeof(TouchToggleSlider), new PropertyMetadata(null)); public Brush CheckedBackground { get { return (Brush)GetValue(CheckedBackgroundProperty); } set { SetValue(CheckedBackgroundProperty, value); } } public static readonly DependencyProperty CheckedBackgroundProperty = DependencyProperty.Register("CheckedBackground", typeof(Brush), typeof(TouchToggleSlider), new PropertyMetadata(null)); public DataTemplate UncheckedThumbContentTemplate { get { return (DataTemplate)GetValue(UncheckedThumbContentTemplateProperty); } set { SetValue(UncheckedThumbContentTemplateProperty, value); } } public static readonly DependencyProperty UncheckedThumbContentTemplateProperty = DependencyProperty.Register("UncheckedThumbContentTemplate", typeof(DataTemplate), typeof(TouchToggleSlider), new PropertyMetadata(null)); public DataTemplate CheckedThumbContentTemplate { get { return (DataTemplate)GetValue(CheckedThumbContentTemplateProperty); } set { SetValue(CheckedThumbContentTemplateProperty, value); } } public static readonly DependencyProperty CheckedThumbContentTemplateProperty = DependencyProperty.Register("CheckedThumbContentTemplate", typeof(DataTemplate), typeof(TouchToggleSlider), new PropertyMetadata(null)); public String LeftText { get { return (String)GetValue(LeftTextProperty); } set { SetValue(LeftTextProperty, value); } } public static readonly DependencyProperty LeftTextProperty = DependencyProperty.Register("LeftText", typeof(String), typeof(TouchToggleSlider), new PropertyMetadata("")); public CornerRadius ThumbCornerRadius { get { return (CornerRadius)GetValue(ThumbCornerRadiusProperty); } set { SetValue(ThumbCornerRadiusProperty, value); } } public static readonly DependencyProperty ThumbCornerRadiusProperty = DependencyProperty.Register("ThumbCornerRadius", typeof(CornerRadius), typeof(TouchToggleSlider), new PropertyMetadata(default(CornerRadius))); public String RightText { get { return (String)GetValue(RightTextProperty); } set { SetValue(RightTextProperty, value); } } // Using a DependencyProperty as the backing store for RightText. This enables animation, styling, binding, etc... public static readonly DependencyProperty RightTextProperty = DependencyProperty.Register("RightText", typeof(String), typeof(TouchToggleSlider), new PropertyMetadata("")); public int ThumbWidth { get { return (int)GetValue(ThumbWidthProperty); } set { SetValue(ThumbWidthProperty, value); } } // Using a DependencyProperty as the backing store for ThumbWidth. This enables animation, styling, binding, etc... public static readonly DependencyProperty ThumbWidthProperty = DependencyProperty.Register("ThumbWidth", typeof(int), typeof(TouchToggleSlider), new PropertyMetadata(0)); public TouchToggleSlider() { Loaded += TouchToggleSlider_Loaded; } private void TouchToggleSlider_Loaded(object sender, RoutedEventArgs e) { SetThumbPosition(); } public override void OnApplyTemplate() { base.OnApplyTemplate(); _grid_ellipse = GetTemplateChild("PART_GridEllipse") as Grid; SetThumbPosition(); } protected override void OnChecked(RoutedEventArgs e) { base.OnChecked(e); SetThumbPosition(); } protected override void OnUnchecked(RoutedEventArgs e) { base.OnUnchecked(e); SetThumbPosition(); } private void SetThumbPosition() { if (_grid_ellipse != null) { ThicknessAnimation ani = new ThicknessAnimation(); ani.Duration = TimeSpan.FromSeconds(0.2); if (IsChecked.Value) { if (ActualWidth != 0 && _grid_ellipse.ActualWidth == 0) { ani.To = new Thickness(ActualWidth - (ActualWidth/2) - 4, 0, 0, 0); } else { ani.To = new Thickness(ActualWidth - _grid_ellipse.ActualWidth - 4, 0, 0, 0); } } else { ani.To = new Thickness(0, 0, 0, 0); } _grid_ellipse.BeginAnimation(Grid.MarginProperty, ani); } } } }