using Avalonia.Animation;
using Avalonia.Controls.Metadata;
using Avalonia.Controls.Presenters;
using Avalonia.Controls.Primitives;
using Avalonia.Controls.Templates;
using Avalonia.Interactivity;
using Avalonia.LogicalTree;
namespace Avalonia.Controls
{
///
/// A Toggle Switch control.
///
[TemplatePart("PART_MovingKnobs", typeof(Panel))]
[TemplatePart("PART_OffContentPresenter", typeof(ContentPresenter))]
[TemplatePart("PART_OnContentPresenter", typeof(ContentPresenter))]
[TemplatePart("PART_SwitchKnob", typeof(Panel))]
[PseudoClasses(":dragging")]
public class ToggleSwitch : ToggleButton
{
private Panel? _knobsPanel;
private Panel? _switchKnob;
private bool _knobsPanelPressed = false;
private Point _switchStartPoint = new Point();
private double _initLeft = -1;
private bool _isDragging = false;
static ToggleSwitch()
{
OffContentProperty.Changed.AddClassHandler((x, e) => x.OffContentChanged(e));
OnContentProperty.Changed.AddClassHandler((x, e) => x.OnContentChanged(e));
IsCheckedProperty.Changed.AddClassHandler((x, e) =>
{
if ((e.NewValue != null) && (e.NewValue is bool val))
{
x.UpdateKnobPos(val);
}
});
BoundsProperty.Changed.AddClassHandler((x, e) =>
{
if (x.IsChecked != null)
{
x.UpdateKnobPos(x.IsChecked.Value);
}
});
KnobTransitionsProperty.Changed.AddClassHandler((x, e) =>
{
x.UpdateKnobTransitions();
});
}
///
/// Defines the property.
///
public static readonly StyledProperty