<ResourceDictionary
    xmlns="https://github.com/avaloniaui"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    x:CompileBindings="True">
    <Design.PreviewWith>
        <StackPanel Margin="20">
            <ToggleSwitch
                Content="Content"
                OffContent="OffContent"
                OnContent="OnContent" />
        </StackPanel>
    </Design.PreviewWith>
    <ControlTheme x:Key="{x:Type ToggleSwitch}" TargetType="ToggleSwitch">
        <Setter Property="HorizontalAlignment" Value="Left" />
        <Setter Property="VerticalAlignment" Value="Center" />
        <Setter Property="HorizontalContentAlignment" Value="Left" />
        <Setter Property="VerticalContentAlignment" Value="Center" />
        <Setter Property="FocusAdorner">
            <FocusAdornerTemplate>
                <Border BorderThickness="{DynamicResource AdornerLayerBorderThickness}"
                        BorderBrush="{DynamicResource AdornerLayerStroke}" 
                        CornerRadius="100"/>
            </FocusAdornerTemplate>
        </Setter>
        <Setter Property="KnobTransitions">
            <Transitions>
                <DoubleTransition
                    Easing="CubicEaseOut"
                    Property="Canvas.Left"
                    Duration="0:0:0.2" />
            </Transitions>
        </Setter>
        <Setter Property="Template">
            <ControlTemplate TargetType="ToggleSwitch">
                <Grid
                    Background="{TemplateBinding Background}"
                    Cursor="Hand"
                    RowDefinitions="Auto,*"
                    ColumnDefinitions="Auto, *">
                    <ContentPresenter
                        x:Name="PART_ContentPresenter"
                        Grid.Row="0" Grid.Column="0"
                        Grid.ColumnSpan="2"
                        Margin="{DynamicResource ToggleSwitchHeaderMargin}"
                        VerticalAlignment="Top"
                        Content="{TemplateBinding Content}"
                        ContentTemplate="{TemplateBinding ContentTemplate}"
                        IsVisible="{TemplateBinding Content, Converter={x:Static ObjectConverters.IsNotNull}}"
                        RecognizesAccessKey="True" />

                    <Border
                        x:Name="SwitchBackgroundBorder"
                        Grid.Row="1" Grid.Column="0"
                        TemplatedControl.IsTemplateFocusTarget="True"
                        Width="{DynamicResource ToggleSwitchDefaultWidth}"
                        Height="{DynamicResource ToggleSwitchDefaultHeight}"
                        CornerRadius="100">
                        <Border.Transitions>
                            <Transitions>
                                <BrushTransition Property="Background" Duration="0:0:0.2" />
                            </Transitions>
                        </Border.Transitions>
                        <Canvas
                            x:Name="PART_SwitchKnob"
                            Width="{DynamicResource ToggleSwitchIndicatorDefaultWidth}"
                            Height="{DynamicResource ToggleSwitchIndicatorDefaultWidth}"
                            HorizontalAlignment="Left">
                            <Grid
                                x:Name="PART_MovingKnobs"
                                Width="{DynamicResource ToggleSwitchIndicatorDefaultWidth}"
                                Height="{DynamicResource ToggleSwitchIndicatorDefaultWidth}"
                                Margin="{DynamicResource ToggleSwitchIndicatorDefaultMargin}">
                                <Border
                                    x:Name="SwitchKnobIndicator"
                                    Background="White"
                                    BoxShadow="0 0 1 1 #222E3238"
                                    CornerRadius="100" />
                                <Arc
                                    x:Name="SwitchKnobLoadingIndicator"
                                    IsVisible="False"
                                    StrokeThickness="2"
                                    StartAngle="0"
                                    SweepAngle="140"
                                    StrokeJoin="Round"
                                    StrokeLineCap="Round">
                                    <Arc.Stroke>
                                        <ConicGradientBrush>
                                            <GradientStops>
                                                <GradientStop Offset="0.1" Color="Transparent" />
                                                <GradientStop Offset="0.7" Color="White" />
                                            </GradientStops>
                                        </ConicGradientBrush>
                                    </Arc.Stroke>
                                    <Arc.Styles>
                                        <Style Selector="Arc[IsVisible=True]">
                                            <Style.Animations>
                                                <Animation IterationCount="Infinite" Duration="0:0:0.6">
                                                    <KeyFrame Cue="0%">
                                                        <Setter Property="RotateTransform.Angle" Value="0.0" />
                                                    </KeyFrame>
                                                    <KeyFrame Cue="100%">
                                                        <Setter Property="RotateTransform.Angle" Value="360.0" />
                                                    </KeyFrame>
                                                </Animation>
                                            </Style.Animations>
                                        </Style>
                                    </Arc.Styles>
                                </Arc>
                            </Grid>
                        </Canvas>
                    </Border>

                    <ContentPresenter
                        x:Name="PART_OnContentPresenter"
                        Grid.Row="1" Grid.Column="1"
                        Margin="{DynamicResource ToggleSwitchOnContentMargin}"
                        HorizontalAlignment="Left"
                        VerticalAlignment="Center"
                        VerticalContentAlignment="Center"
                        Content="{TemplateBinding OnContent}"
                        ContentTemplate="{TemplateBinding OnContentTemplate}" />
                    <ContentPresenter
                        x:Name="PART_OffContentPresenter"
                        Grid.Row="1" Grid.Column="1"
                        Margin="{DynamicResource ToggleSwitchOnContentMargin}"
                        HorizontalAlignment="Left"
                        VerticalAlignment="Center"
                        VerticalContentAlignment="Center"
                        Content="{TemplateBinding OffContent}"
                        ContentTemplate="{TemplateBinding OffContentTemplate}" />
                </Grid>
            </ControlTemplate>
        </Setter>

        <Style Selector="^ /template/ ContentPresenter#PART_ContentPresenter:empty">
            <Setter Property="Margin" Value="0" />
        </Style>

        <Style Selector="^:unchecked">
            <Style Selector="^ /template/ ContentPresenter#PART_OnContentPresenter">
                <Setter Property="IsVisible" Value="False" />
            </Style>
            <Style Selector="^ /template/ ContentPresenter#PART_OffContentPresenter">
                <Setter Property="IsVisible" Value="True" />
            </Style>
            <Style Selector="^ /template/ Border#SwitchBackgroundBorder">
                <Setter Property="Background" Value="{DynamicResource ToggleSwitchContainerUnCheckedDefaultBackground}" />
            </Style>
            <Style Selector="^:pointerover /template/ Border#SwitchBackgroundBorder">
                <Setter Property="Background" Value="{DynamicResource ToggleSwitchContainerUnCheckedPointeroverBackground}" />
            </Style>
            <Style Selector="^:pressed /template/ Border#SwitchBackgroundBorder">
                <Setter Property="Background" Value="{DynamicResource ToggleSwitchContainerUnCheckedPressedBackground}" />
            </Style>
            <Style Selector="^:disabled /template/ Border#SwitchBackgroundBorder">
                <Setter Property="Background" Value="{DynamicResource ToggleSwitchContainerUnCheckedDisabledBackground}" />
                <Setter Property="BorderBrush" Value="{DynamicResource ToggleSwitchContainerUnCheckedDisabledBorderBrush}" />
                <Setter Property="BorderThickness" Value="1" />
            </Style>
        </Style>

        <Style Selector="^:checked">
            <Style Selector="^ /template/ ContentPresenter#PART_OnContentPresenter">
                <Setter Property="IsVisible" Value="True" />
            </Style>
            <Style Selector="^ /template/ ContentPresenter#PART_OffContentPresenter">
                <Setter Property="IsVisible" Value="False" />
            </Style>
            <Style Selector="^ /template/ Border#SwitchBackgroundBorder">
                <Setter Property="Background" Value="{DynamicResource ToggleSwitchContainerCheckedDefaultBackground}" />
            </Style>
            <Style Selector="^:pointerover /template/ Border#SwitchBackgroundBorder">
                <Setter Property="Background" Value="{DynamicResource ToggleSwitchContainerCheckedPointeroverBackground}" />
            </Style>
            <Style Selector="^:pressed /template/ Border#SwitchBackgroundBorder">
                <Setter Property="Background" Value="{DynamicResource ToggleSwitchContainerCheckedPressedBackground}" />
            </Style>
            <Style Selector="^:disabled /template/ Border#SwitchBackgroundBorder">
                <Setter Property="Background" Value="{DynamicResource ToggleSwitchContainerCheckedDisabledBackground}" />
            </Style>
        </Style>

        <Style Selector="^.Loading">
            <Style Selector="^ /template/ Border#SwitchKnobIndicator">
                <Setter Property="IsVisible" Value="False" />
            </Style>
            <Style Selector="^ /template/ Arc#SwitchKnobLoadingIndicator">
                <Setter Property="IsVisible" Value="True" />
            </Style>
            <Style Selector="^:unchecked /template/ Border#SwitchBackgroundBorder">
                <Setter Property="Background" Value="{DynamicResource ToggleSwitchContainerUnCheckedPointeroverBackground}" />
            </Style>
            <Style Selector="^:checked /template/ Border#SwitchBackgroundBorder">
                <Setter Property="Background" Value="{DynamicResource ToggleSwitchContainerCheckedPointeroverBackground}" />
            </Style>
        </Style>

        <Style Selector="^.Small">
            <Style Selector="^ /template/ Border#SwitchBackgroundBorder">
                <Setter Property="Width" Value="{DynamicResource ToggleSwitchSmallWidth}" />
                <Setter Property="Height" Value="{DynamicResource ToggleSwitchSmallHeight}" />
            </Style>
            <Style Selector="^ /template/ Canvas#PART_SwitchKnob">
                <Setter Property="Width" Value="{DynamicResource ToggleSwitchIndicatorSmallWidth}" />
                <Setter Property="Height" Value="{DynamicResource ToggleSwitchIndicatorSmallWidth}" />
            </Style>
            <Style Selector="^ /template/ Grid#PART_MovingKnobs">
                <Setter Property="Width" Value="{DynamicResource ToggleSwitchIndicatorSmallWidth}" />
                <Setter Property="Height" Value="{DynamicResource ToggleSwitchIndicatorSmallWidth}" />
                <Setter Property="Margin" Value="{DynamicResource ToggleSwitchIndicatorSmallMargin}"/>
            </Style>
            <Style Selector="^ /template/ Arc#SwitchKnobLoadingIndicator">
                <Setter Property="StrokeThickness" Value="{DynamicResource ToggleSwitchLoadingIndicatorSmallStrokeThickness}" />
            </Style>
        </Style>
        <Style Selector="^.Large">
            <Style Selector="^ /template/ Border#SwitchBackgroundBorder">
                <Setter Property="Width" Value="{DynamicResource ToggleSwitchLargeWidth}" />
                <Setter Property="Height" Value="{DynamicResource ToggleSwitchLargeHeight}" />
            </Style>
            <Style Selector="^ /template/ Canvas#PART_SwitchKnob">
                <Setter Property="Width" Value="{DynamicResource ToggleSwitchIndicatorLargeWidth}" />
                <Setter Property="Height" Value="{DynamicResource ToggleSwitchIndicatorLargeWidth}" />
            </Style>
            <Style Selector="^ /template/ Grid#PART_MovingKnobs">
                <Setter Property="Width" Value="{DynamicResource ToggleSwitchIndicatorLargeWidth}" />
                <Setter Property="Height" Value="{DynamicResource ToggleSwitchIndicatorLargeWidth}" />
                <Setter Property="Margin" Value="{DynamicResource ToggleSwitchIndicatorLargeMargin}"/>
            </Style>
            <Style Selector="^ /template/ Arc#SwitchKnobLoadingIndicator">
                <Setter Property="StrokeThickness" Value="{DynamicResource ToggleSwitchLoadingIndicatorLargeStrokeThickness}" />
            </Style>
        </Style>
    </ControlTheme>

    <ControlTheme
        x:Key="ButtonToggleSwitch"
        BasedOn="{StaticResource {x:Type ToggleSwitch}}"
        TargetType="ToggleSwitch">
        <Setter Property="Padding" Value="8" />
        <Setter Property="CornerRadius" Value="3" />
        <Setter Property="Background" Value="Transparent" />
        <Setter Property="FocusAdorner">
            <FocusAdornerTemplate>
                <Border BorderThickness="{DynamicResource AdornerLayerBorderThickness}"
                        BorderBrush="{DynamicResource AdornerLayerStroke}" />
            </FocusAdornerTemplate>
        </Setter>
        <Setter Property="Template">
            <ControlTemplate TargetType="ToggleSwitch">
                <Border
                    Name="Background"
                    Padding="{TemplateBinding Padding}"
                    Background="{TemplateBinding Background}"
                    CornerRadius="{TemplateBinding CornerRadius}"
                    Cursor="Hand">
                    <Panel>
                        <Panel x:Name="PART_SwitchKnob" />
                        <Panel x:Name="PART_MovingKnobs" />
                        <ContentPresenter
                            x:Name="PART_OnContentPresenter"
                            Margin="{DynamicResource ToggleSwitchOnContentMargin}"
                            Content="{TemplateBinding OnContent}"
                            ContentTemplate="{TemplateBinding OnContentTemplate}" />
                        <ContentPresenter
                            x:Name="PART_OffContentPresenter"
                            Margin="{DynamicResource ToggleSwitchOnContentMargin}"
                            Content="{TemplateBinding OffContent}"
                            ContentTemplate="{TemplateBinding OffContentTemplate}" />
                    </Panel>
                </Border>
            </ControlTemplate>
        </Setter>
        <Style Selector="^:pointerover">
            <Setter Property="Background" Value="{DynamicResource ButtonDefaultPointeroverBackground}" />
        </Style>
        <Style Selector="^:pressed">
            <Setter Property="Background" Value="{DynamicResource ButtonDefaultPressedBackground}" />
        </Style>
    </ControlTheme>

    <ControlTheme
        x:Key="SimpleToggleSwitch"
        BasedOn="{StaticResource {x:Type ToggleSwitch}}"
        TargetType="ToggleSwitch">
        <Setter Property="OnContent" Value="{x:Null}" />
        <Setter Property="OffContent" Value="{x:Null}" />
        <Setter Property="FontSize" Value="{DynamicResource SimpleToggleSwitchFontSize}" />
        <Setter Property="Template">
            <ControlTemplate TargetType="ToggleSwitch">
                <Border
                    x:Name="SwitchBackgroundBorder"
                    Background="{TemplateBinding Background}"
                    Cursor="Hand"
                    Width="{DynamicResource ToggleSwitchDefaultWidth}"
                    Height="{DynamicResource ToggleSwitchDefaultHeight}"
                    CornerRadius="100">
                    <Border.Transitions>
                        <Transitions>
                            <BrushTransition Property="Background" Duration="0:0:0.2" />
                        </Transitions>
                    </Border.Transitions>
                    <Grid
                        ColumnDefinitions="*,*">
                        <Canvas
                            x:Name="PART_SwitchKnob"
                            Grid.Column="0"
                            Grid.ColumnSpan="2"
                            Width="{DynamicResource ToggleSwitchIndicatorDefaultWidth}"
                            Height="{DynamicResource ToggleSwitchIndicatorDefaultWidth}"
                            HorizontalAlignment="Left">
                            <Grid
                                x:Name="PART_MovingKnobs"
                                Width="{DynamicResource ToggleSwitchIndicatorDefaultWidth}"
                                Height="{DynamicResource ToggleSwitchIndicatorDefaultWidth}"
                                Margin="{DynamicResource ToggleSwitchIndicatorDefaultMargin}">
                                <Border
                                    x:Name="SwitchKnobIndicator"
                                    Background="White"
                                    BoxShadow="0 0 1 1 #222E3238"
                                    CornerRadius="100" />
                                <Arc
                                    x:Name="SwitchKnobLoadingIndicator"
                                    IsVisible="False"
                                    StrokeThickness="2"
                                    StartAngle="0"
                                    SweepAngle="140"
                                    StrokeJoin="Round"
                                    StrokeLineCap="Round">
                                    <Arc.Stroke>
                                        <ConicGradientBrush>
                                            <GradientStops>
                                                <GradientStop Offset="0.1" Color="Transparent" />
                                                <GradientStop Offset="0.7" Color="White" />
                                            </GradientStops>
                                        </ConicGradientBrush>
                                    </Arc.Stroke>
                                    <Arc.Styles>
                                        <Style Selector="Arc[IsVisible=True]">
                                            <Style.Animations>
                                                <Animation IterationCount="Infinite" Duration="0:0:0.6">
                                                    <KeyFrame Cue="0%">
                                                        <Setter Property="RotateTransform.Angle" Value="0.0" />
                                                    </KeyFrame>
                                                    <KeyFrame Cue="100%">
                                                        <Setter Property="RotateTransform.Angle" Value="360.0" />
                                                    </KeyFrame>
                                                </Animation>
                                            </Style.Animations>
                                        </Style>
                                    </Arc.Styles>
                                </Arc>
                            </Grid>
                        </Canvas>
                        <ContentPresenter
                            x:Name="PART_OnContentPresenter"
                            Grid.Column="0"
                            VerticalAlignment="Center"
                            HorizontalAlignment="Center"
                            FontSize="{TemplateBinding FontSize}"
                            Foreground="{TemplateBinding Foreground}"
                            Content="{TemplateBinding OnContent}"
                            ContentTemplate="{TemplateBinding OnContentTemplate}" />
                        <ContentPresenter
                            x:Name="PART_OffContentPresenter"
                            Grid.Column="1"
                            VerticalAlignment="Center"
                            HorizontalAlignment="Center"
                            FontSize="{TemplateBinding FontSize}"
                            Foreground="{TemplateBinding Foreground}"
                            Content="{TemplateBinding OffContent}"
                            ContentTemplate="{TemplateBinding OffContentTemplate}" />
                    </Grid>
                </Border>
            </ControlTemplate>
        </Setter>
        <Style Selector="^:unchecked">
            <Setter Property="Foreground" Value="{DynamicResource SimpleToggleSwitchContainerUnCheckedForeground}" />
        </Style>
        <Style Selector="^:checked">
            <Setter Property="Foreground" Value="{DynamicResource SimpleToggleSwitchContainerCheckedForeground}" />
        </Style>
        <Style Selector="^.Small">
            <Style Selector="^ /template/ ContentPresenter#PART_OnContentPresenter">
                <Setter Property="IsVisible" Value="False" />
            </Style>
            <Style Selector="^ /template/ ContentPresenter#PART_OffContentPresenter">
                <Setter Property="IsVisible" Value="False" />
            </Style>
        </Style>
    </ControlTheme>
</ResourceDictionary>