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 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;
}
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)
{
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);
}
}
}
}