Themes/MaterialDesignTheme.ToggleButton.xaml

<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
                    xmlns:converters="clr-namespace:MaterialDesignThemes.Wpf.Converters"
                    xmlns:wpf="clr-namespace:MaterialDesignThemes.Wpf">
  <ResourceDictionary.MergedDictionaries>
    <ResourceDictionary Source="pack://application:,,,/MaterialDesignThemes.Wpf;component/Themes/MaterialDesignTheme.ValidationErrorTemplate.xaml" />
  </ResourceDictionary.MergedDictionaries>
   
  <Style x:Key="FocusVisual">
    <Setter Property="Control.Template">
      <Setter.Value>
        <ControlTemplate>
          <Rectangle Margin="2"
                     SnapsToDevicePixels="true"
                     Stroke="{DynamicResource {x:Static SystemColors.ControlTextBrushKey}}"
                     StrokeDashArray="1 2"
                     StrokeThickness="1" />
        </ControlTemplate>
      </Setter.Value>
    </Setter>
  </Style>
 
  <wpf:PackIcon x:Key="CheckMarkIcon"
                Width="24"
                Height="24"
                x:Shared="False"
                FlowDirection="LeftToRight"
                Kind="Check" />
 
  <Style x:Key="MaterialDesignActionToggleButton" TargetType="{x:Type ToggleButton}">
    <Style.Resources>
      <ResourceDictionary>
        <Style TargetType="wpf:PackIcon" BasedOn="{StaticResource {x:Type wpf:PackIcon}}">
          <Setter Property="Height" Value="20" />
          <Setter Property="Width" Value="20" />
        </Style>
      </ResourceDictionary>
    </Style.Resources>
    <Setter Property="Background" Value="{DynamicResource MaterialDesign.Brush.Primary}" />
    <Setter Property="BorderThickness" Value="1" />
    <Setter Property="Cursor" Value="Hand" />
    <Setter Property="FontSize" Value="18" />
    <Setter Property="Foreground" Value="{DynamicResource MaterialDesign.Brush.Primary.Foreground}" />
    <Setter Property="Height" Value="32" />
    <Setter Property="HorizontalContentAlignment" Value="Center" />
    <Setter Property="Template">
      <Setter.Value>
        <ControlTemplate TargetType="{x:Type ToggleButton}">
          <Grid Effect="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=(wpf:ElevationAssist.Elevation), Converter={x:Static converters:ShadowConverter.Instance}}">
            <VisualStateManager.VisualStateGroups>
              <VisualStateGroup x:Name="CommonStates">
                <VisualState x:Name="Normal" />
                <VisualState x:Name="Disabled">
                  <Storyboard>
                    <DoubleAnimation Storyboard.TargetProperty="(UIElement.Opacity)"
                                     To="0.38"
                                     Duration="0" />
                  </Storyboard>
                </VisualState>
              </VisualStateGroup>
              <VisualStateGroup x:Name="CheckStates">
                <VisualStateGroup.Transitions>
                  <VisualTransition From="*" To="Checked">
                    <Storyboard FillBehavior="HoldEnd">
                      <DoubleAnimationUsingKeyFrames Storyboard.TargetName="OffScaleTransform"
                                                     Storyboard.TargetProperty="ScaleX"
                                                     Duration="0:0:0.2">
                        <LinearDoubleKeyFrame KeyTime="0:0:0.0" Value="1" />
                        <LinearDoubleKeyFrame KeyTime="0:0:0.1" Value="0" />
                      </DoubleAnimationUsingKeyFrames>
                      <DoubleAnimationUsingKeyFrames Storyboard.TargetName="OnScaleTransform"
                                                     Storyboard.TargetProperty="ScaleX"
                                                     Duration="0:0:0.2">
                        <LinearDoubleKeyFrame KeyTime="0:0:0.1" Value="0" />
                        <LinearDoubleKeyFrame KeyTime="0:0:0.2" Value="1" />
                      </DoubleAnimationUsingKeyFrames>
                    </Storyboard>
                  </VisualTransition>
                  <VisualTransition From="Checked" To="Unchecked">
                    <Storyboard FillBehavior="HoldEnd">
                      <DoubleAnimationUsingKeyFrames Storyboard.TargetName="OnScaleTransform"
                                                     Storyboard.TargetProperty="ScaleX"
                                                     Duration="0:0:0.2">
                        <LinearDoubleKeyFrame KeyTime="0:0:0.0" Value="1" />
                        <LinearDoubleKeyFrame KeyTime="0:0:0.1" Value="0" />
                      </DoubleAnimationUsingKeyFrames>
                      <DoubleAnimationUsingKeyFrames Storyboard.TargetName="OffScaleTransform"
                                                     Storyboard.TargetProperty="ScaleX"
                                                     Duration="0:0:0.2">
                        <LinearDoubleKeyFrame KeyTime="0:0:0.1" Value="0" />
                        <LinearDoubleKeyFrame KeyTime="0:0:0.2" Value="1" />
                      </DoubleAnimationUsingKeyFrames>
                    </Storyboard>
                  </VisualTransition>
                </VisualStateGroup.Transitions>
                <VisualState x:Name="Checked">
                  <Storyboard>
                    <DoubleAnimation Storyboard.TargetName="OffScaleTransform"
                                     Storyboard.TargetProperty="ScaleX"
                                     To="0"
                                     Duration="0" />
                    <DoubleAnimation Storyboard.TargetName="OnScaleTransform"
                                     Storyboard.TargetProperty="ScaleX"
                                     To="1"
                                     Duration="0" />
                  </Storyboard>
                </VisualState>
                <VisualState x:Name="Unchecked">
                  <Storyboard>
                    <DoubleAnimation Storyboard.TargetName="OffScaleTransform"
                                     Storyboard.TargetProperty="ScaleX"
                                     To="1"
                                     Duration="0" />
                    <DoubleAnimation Storyboard.TargetName="OnScaleTransform"
                                     Storyboard.TargetProperty="ScaleX"
                                     To="0"
                                     Duration="0" />
                  </Storyboard>
                </VisualState>
                <VisualState x:Name="Indeterminate">
                  <Storyboard>
                    <DoubleAnimation Storyboard.TargetName="IndeterminateCheck"
                                     Storyboard.TargetProperty="(UIElement.Opacity)"
                                     To="1"
                                     Duration="0" />
                  </Storyboard>
                </VisualState>
              </VisualStateGroup>
            </VisualStateManager.VisualStateGroups>
            <Grid x:Name="OffGrid"
                  Background="{TemplateBinding Background}"
                  RenderTransformOrigin=".5,.5">
              <ContentPresenter HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}"
                                VerticalAlignment="{TemplateBinding VerticalContentAlignment}"
                                Content="{TemplateBinding Content}"
                                ContentTemplate="{TemplateBinding ContentTemplate}"
                                FlowDirection="LeftToRight" />
              <Grid.Clip>
                <EllipseGeometry RadiusX="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=Width, Converter={x:Static converters:MathConverter.DivideInstance}, ConverterParameter=2.0}" RadiusY="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=Height, Converter={x:Static converters:MathConverter.DivideInstance}, ConverterParameter=2.0}">
                  <EllipseGeometry.Center>
                    <MultiBinding Converter="{x:Static converters:PointValueConverter.Instance}">
                      <Binding Converter="{x:Static converters:MathConverter.DivideInstance}"
                               ConverterParameter="2.0"
                               Path="Width"
                               RelativeSource="{RelativeSource TemplatedParent}" />
                      <Binding Converter="{x:Static converters:MathConverter.DivideInstance}"
                               ConverterParameter="2.0"
                               Path="Height"
                               RelativeSource="{RelativeSource TemplatedParent}" />
                    </MultiBinding>
                  </EllipseGeometry.Center>
                </EllipseGeometry>
              </Grid.Clip>
              <Grid.RenderTransform>
                <ScaleTransform x:Name="OffScaleTransform" ScaleX="1" ScaleY="1" />
              </Grid.RenderTransform>
            </Grid>
            <Grid x:Name="OnGrid"
                  Background="{TemplateBinding Background}"
                  RenderTransformOrigin=".5,.5">
              <ContentPresenter HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}"
                                VerticalAlignment="{TemplateBinding VerticalContentAlignment}"
                                Content="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=(wpf:ToggleButtonAssist.OnContent)}"
                                ContentTemplate="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=(wpf:ToggleButtonAssist.OnContentTemplate)}"
                                FlowDirection="LeftToRight" />
              <Grid.Clip>
                <EllipseGeometry RadiusX="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=Width, Converter={x:Static converters:MathConverter.DivideInstance}, ConverterParameter=2.0}" RadiusY="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=Height, Converter={x:Static converters:MathConverter.DivideInstance}, ConverterParameter=2.0}">
                  <EllipseGeometry.Center>
                    <MultiBinding Converter="{x:Static converters:PointValueConverter.Instance}">
                      <Binding Converter="{x:Static converters:MathConverter.DivideInstance}"
                               ConverterParameter="2.0"
                               Path="Width"
                               RelativeSource="{RelativeSource TemplatedParent}" />
                      <Binding Converter="{x:Static converters:MathConverter.DivideInstance}"
                               ConverterParameter="2.0"
                               Path="Height"
                               RelativeSource="{RelativeSource TemplatedParent}" />
                    </MultiBinding>
                  </EllipseGeometry.Center>
                </EllipseGeometry>
              </Grid.Clip>
              <Grid.RenderTransform>
                <ScaleTransform x:Name="OnScaleTransform" ScaleX="0" ScaleY="1" />
              </Grid.RenderTransform>
            </Grid>
          </Grid>
        </ControlTemplate>
      </Setter.Value>
    </Setter>
    <Setter Property="VerticalContentAlignment" Value="Center" />
    <Setter Property="Width" Value="32" />
    <Setter Property="wpf:ElevationAssist.Elevation" Value="Dp0" />
    <Setter Property="wpf:ToggleButtonAssist.OnContent" Value="{StaticResource CheckMarkIcon}" />
  </Style>
 
  <Style x:Key="MaterialDesignActionLightToggleButton"
         TargetType="{x:Type ToggleButton}"
         BasedOn="{StaticResource MaterialDesignActionToggleButton}">
    <Setter Property="Background" Value="{DynamicResource MaterialDesign.Brush.Primary.Light}" />
    <Setter Property="BorderBrush" Value="{DynamicResource MaterialDesign.Brush.Primary.Light}" />
    <Setter Property="Foreground" Value="{DynamicResource MaterialDesign.Brush.Primary.Light.Foreground}" />
  </Style>
 
  <Style x:Key="MaterialDesignActionDarkToggleButton"
         TargetType="{x:Type ToggleButton}"
         BasedOn="{StaticResource MaterialDesignActionToggleButton}">
    <Setter Property="Background" Value="{DynamicResource MaterialDesign.Brush.Primary.Dark}" />
    <Setter Property="BorderBrush" Value="{DynamicResource MaterialDesign.Brush.Primary.Dark}" />
    <Setter Property="Foreground" Value="{DynamicResource MaterialDesign.Brush.Primary.Dark.Foreground}" />
  </Style>
 
  <Style x:Key="MaterialDesignActionSecondaryToggleButton"
         TargetType="{x:Type ToggleButton}"
         BasedOn="{StaticResource MaterialDesignActionToggleButton}">
    <Setter Property="Background" Value="{DynamicResource MaterialDesign.Brush.Secondary}" />
    <Setter Property="BorderBrush" Value="{DynamicResource MaterialDesign.Brush.Secondary}" />
    <Setter Property="Foreground" Value="{DynamicResource MaterialDesign.Brush.Secondary.Foreground}" />
  </Style>
 
  <Style x:Key="MaterialDesignFlatToggleButton" TargetType="{x:Type ToggleButton}">
    <Setter Property="Background" Value="{DynamicResource MaterialDesign.Brush.ToggleButton.Background}" />
    <Setter Property="FontSize" Value="18" />
    <Setter Property="Foreground" Value="{DynamicResource MaterialDesign.Brush.ToggleButton.Foreground}" />
    <Setter Property="Height" Value="40" />
    <Setter Property="HorizontalContentAlignment" Value="Center" />
    <Setter Property="Padding" Value="0" />
    <Setter Property="Template">
      <Setter.Value>
        <ControlTemplate TargetType="{x:Type ToggleButton}">
          <Grid Width="{TemplateBinding Width}"
                Height="{TemplateBinding Height}"
                ClipToBounds="True">
            <VisualStateManager.VisualStateGroups>
              <VisualStateGroup x:Name="CommonStates">
                <VisualState x:Name="Normal" />
                <VisualState x:Name="Disabled">
                  <Storyboard>
                    <DoubleAnimation Storyboard.TargetProperty="(UIElement.Opacity)"
                                     To="0.38"
                                     Duration="0" />
                  </Storyboard>
                </VisualState>
              </VisualStateGroup>
              <VisualStateGroup x:Name="CheckStates">
                <VisualStateGroup.Transitions>
                  <VisualTransition From="*" To="Checked">
                    <Storyboard>
                      <DoubleAnimationUsingKeyFrames Storyboard.TargetName="CheckedEllipseScale"
                                                     Storyboard.TargetProperty="ScaleX"
                                                     Duration="0:0:0.2">
                        <LinearDoubleKeyFrame KeyTime="0:0:0.0" Value="0" />
                        <LinearDoubleKeyFrame KeyTime="0:0:0.1" Value="1.0" />
                      </DoubleAnimationUsingKeyFrames>
                      <DoubleAnimationUsingKeyFrames Storyboard.TargetName="CheckedEllipseScale"
                                                     Storyboard.TargetProperty="ScaleY"
                                                     Duration="0:0:0.2">
                        <LinearDoubleKeyFrame KeyTime="0:0:0.0" Value="0" />
                        <LinearDoubleKeyFrame KeyTime="0:0:0.1" Value="1.0" />
                      </DoubleAnimationUsingKeyFrames>
                    </Storyboard>
                  </VisualTransition>
                  <VisualTransition From="Checked" To="Unchecked">
                    <Storyboard>
                      <DoubleAnimationUsingKeyFrames Storyboard.TargetName="CheckedEllipseScale"
                                                     Storyboard.TargetProperty="ScaleX"
                                                     Duration="0:0:0.2">
                        <LinearDoubleKeyFrame KeyTime="0:0:0.0" Value="1.0" />
                        <LinearDoubleKeyFrame KeyTime="0:0:0.1" Value="0" />
                      </DoubleAnimationUsingKeyFrames>
                      <DoubleAnimationUsingKeyFrames Storyboard.TargetName="CheckedEllipseScale"
                                                     Storyboard.TargetProperty="ScaleY"
                                                     Duration="0:0:0.2">
                        <LinearDoubleKeyFrame KeyTime="0:0:0.0" Value="1.0" />
                        <LinearDoubleKeyFrame KeyTime="0:0:0.1" Value="0" />
                      </DoubleAnimationUsingKeyFrames>
                    </Storyboard>
                  </VisualTransition>
                </VisualStateGroup.Transitions>
                <VisualState x:Name="Checked">
                  <Storyboard>
                    <DoubleAnimation Storyboard.TargetName="CheckedEllipseScale"
                                     Storyboard.TargetProperty="ScaleX"
                                     To="1.0"
                                     Duration="0" />
                    <DoubleAnimation Storyboard.TargetName="CheckedEllipseScale"
                                     Storyboard.TargetProperty="ScaleY"
                                     To="1.0"
                                     Duration="0" />
                  </Storyboard>
                </VisualState>
                <VisualState x:Name="Unchecked">
                  <Storyboard>
                    <DoubleAnimation Storyboard.TargetName="CheckedEllipseScale"
                                     Storyboard.TargetProperty="ScaleX"
                                     To="0"
                                     Duration="0" />
                    <DoubleAnimation Storyboard.TargetName="CheckedEllipseScale"
                                     Storyboard.TargetProperty="ScaleY"
                                     To="0"
                                     Duration="0" />
                  </Storyboard>
                </VisualState>
              </VisualStateGroup>
            </VisualStateManager.VisualStateGroups>
            <Ellipse x:Name="HoverEllipse"
                     Fill="Transparent"
                     Stroke="Transparent"
                     StrokeThickness="1" />
            <Ellipse x:Name="CheckedEllipse"
                     Fill="{TemplateBinding Background}"
                     RenderTransformOrigin="0.5, 0.5">
              <Ellipse.RenderTransform>
                <ScaleTransform x:Name="CheckedEllipseScale" CenterX="0.5" CenterY="0.5" ScaleX="1.0" ScaleY="1.0" />
              </Ellipse.RenderTransform>
            </Ellipse>
            <ContentPresenter x:Name="contentPresenter"
                              Margin="{TemplateBinding Padding}"
                              HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}"
                              VerticalAlignment="{TemplateBinding VerticalContentAlignment}"
                              Content="{TemplateBinding Content}"
                              ContentTemplate="{TemplateBinding ContentTemplate}" />
          </Grid>
          <ControlTemplate.Triggers>
            <Trigger Property="IsMouseOver" Value="true">
              <Setter TargetName="HoverEllipse" Property="Stroke" Value="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=Background}" />
            </Trigger>
            <!-- TODO
                        <Trigger Property="IsFocused" Value="True">
                            <Setter Property="BorderBrush" TargetName="normal" Value="{Binding (Custom:ControlsHelper.FocusBorderBrush), RelativeSource={RelativeSource TemplatedParent}}"/>
                        </Trigger>
                        -->
          </ControlTemplate.Triggers>
        </ControlTemplate>
      </Setter.Value>
    </Setter>
    <Setter Property="VerticalContentAlignment" Value="Center" />
    <Setter Property="Width" Value="40" />
  </Style>
 
  <Style x:Key="MaterialDesignFlatPrimaryToggleButton"
         TargetType="{x:Type ToggleButton}"
         BasedOn="{StaticResource MaterialDesignFlatToggleButton}">
    <Setter Property="Background" Value="{DynamicResource MaterialDesign.Brush.Primary.Light}" />
    <Setter Property="Foreground" Value="{DynamicResource MaterialDesign.Brush.Primary.Dark}" />
  </Style>
 
  <Style x:Key="MaterialDesignSwitchToggleButton" TargetType="{x:Type ToggleButton}">
    <Setter Property="Background" Value="{DynamicResource MaterialDesign.Brush.Primary}" />
    <Setter Property="BorderThickness" Value="1" />
    <Setter Property="FocusVisualStyle" Value="{StaticResource FocusVisual}" />
    <Setter Property="Foreground" Value="{DynamicResource MaterialDesign.Brush.Primary.Foreground}" />
    <Setter Property="Padding" Value="0,1,0,0" />
    <Setter Property="Template">
      <Setter.Value>
        <ControlTemplate TargetType="{x:Type ToggleButton}">
          <ControlTemplate.Resources>
            <SineEase x:Key="RippleEasingFunction" EasingMode="EaseInOut" />
            <Storyboard x:Key="ShowRipple">
              <DoubleAnimation EasingFunction="{StaticResource RippleEasingFunction}"
                               Storyboard.TargetName="RippleThumb"
                               Storyboard.TargetProperty="Opacity"
                               To="0.26"
                               Duration="0" />
              <DoubleAnimation EasingFunction="{StaticResource RippleEasingFunction}"
                               Storyboard.TargetName="RippleThumb"
                               Storyboard.TargetProperty="(UIElement.RenderTransform).(ScaleTransform.ScaleX)"
                               From="1"
                               To="2.5"
                               Duration="0:0:0.2" />
              <DoubleAnimation EasingFunction="{StaticResource RippleEasingFunction}"
                               Storyboard.TargetName="RippleThumb"
                               Storyboard.TargetProperty="(UIElement.RenderTransform).(ScaleTransform.ScaleY)"
                               From="1"
                               To="2.5"
                               Duration="0:0:0.2" />
            </Storyboard>
            <Storyboard x:Key="HideRipple">
              <DoubleAnimation EasingFunction="{StaticResource RippleEasingFunction}"
                               Storyboard.TargetName="RippleThumb"
                               Storyboard.TargetProperty="Opacity"
                               To="0"
                               Duration="0:0:0.3" />
            </Storyboard>
          </ControlTemplate.Resources>
          <Viewbox Width="{TemplateBinding Width}">
            <VisualStateManager.VisualStateGroups>
              <VisualStateGroup x:Name="CheckStates">
                <VisualStateGroup.Transitions>
                  <VisualTransition From="*" To="Checked">
                    <Storyboard>
                      <DoubleAnimationUsingKeyFrames Storyboard.TargetName="ThumbHolder" Storyboard.TargetProperty="(UIElement.RenderTransform).(TranslateTransform.X)">
                        <EasingDoubleKeyFrame KeyTime="0" Value="0" />
                        <EasingDoubleKeyFrame KeyTime="0:0:0.2" Value="23.5">
                          <EasingDoubleKeyFrame.EasingFunction>
                            <QuadraticEase EasingMode="EaseOut" />
                          </EasingDoubleKeyFrame.EasingFunction>
                        </EasingDoubleKeyFrame>
                      </DoubleAnimationUsingKeyFrames>
                    </Storyboard>
                  </VisualTransition>
                  <VisualTransition From="Checked" To="Unchecked">
                    <Storyboard>
                      <DoubleAnimationUsingKeyFrames Storyboard.TargetName="ThumbHolder" Storyboard.TargetProperty="(UIElement.RenderTransform).(TranslateTransform.X)">
                        <EasingDoubleKeyFrame KeyTime="0" Value="23.5" />
                        <EasingDoubleKeyFrame KeyTime="0:0:0.2" Value="0">
                          <EasingDoubleKeyFrame.EasingFunction>
                            <QuadraticEase EasingMode="EaseOut" />
                          </EasingDoubleKeyFrame.EasingFunction>
                        </EasingDoubleKeyFrame>
                      </DoubleAnimationUsingKeyFrames>
                    </Storyboard>
                  </VisualTransition>
                </VisualStateGroup.Transitions>
                <VisualState x:Name="Checked">
                  <Storyboard>
                    <DoubleAnimation Storyboard.TargetName="ThumbHolder"
                                     Storyboard.TargetProperty="(UIElement.RenderTransform).(TranslateTransform.X)"
                                     To="23.5"
                                     Duration="0" />
                  </Storyboard>
                </VisualState>
                <VisualState x:Name="Unchecked">
                  <Storyboard>
                    <DoubleAnimation Storyboard.TargetName="ThumbHolder"
                                     Storyboard.TargetProperty="(UIElement.RenderTransform).(TranslateTransform.X)"
                                     To="0"
                                     Duration="0" />
                  </Storyboard>
                </VisualState>
              </VisualStateGroup>
            </VisualStateManager.VisualStateGroups>
            <Grid>
              <Rectangle x:Name="Track"
                         Width="40"
                         Height="15"
                         Margin="4.211,5,4.211,0"
                         HorizontalAlignment="Left"
                         VerticalAlignment="Top"
                         Fill="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=(wpf:ToggleButtonAssist.SwitchTrackOffBackground)}"
                         Opacity="0.26"
                         RadiusX="7.5"
                         RadiusY="7.5"
                         Stroke="{x:Null}" />
              <Grid x:Name="ThumbHolder"
                    HorizontalAlignment="Left"
                    VerticalAlignment="Top">
                <Ellipse x:Name="RippleThumb"
                         Width="25"
                         Height="25"
                         Margin="0"
                         HorizontalAlignment="Center"
                         VerticalAlignment="Center"
                         Fill="{DynamicResource MaterialDesign.Brush.Primary.Light}"
                         IsHitTestVisible="False"
                         Opacity="0.26"
                         RenderTransformOrigin="0.5,0.5">
                  <Ellipse.RenderTransform>
                    <ScaleTransform ScaleX="1" ScaleY="1" />
                  </Ellipse.RenderTransform>
                </Ellipse>
                <AdornerDecorator CacheMode="{Binding RelativeSource={RelativeSource Self}, Path=(wpf:ShadowAssist.CacheMode)}">
                  <Ellipse x:Name="Thumb"
                           Width="25"
                           Height="25"
                           Margin="0,0,0,0"
                           HorizontalAlignment="Center"
                           VerticalAlignment="Center"
                           Effect="{DynamicResource MaterialDesignShadowDepth1}"
                           Fill="#FFFAFAFA"
                           RenderTransformOrigin="0.5,0.5"
                           Stroke="{x:Null}" />
                </AdornerDecorator>
                <ContentPresenter x:Name="ContentPresenter"
                                  Margin="{TemplateBinding Padding}"
                                  HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}"
                                  VerticalAlignment="{TemplateBinding VerticalContentAlignment}"
                                  Content="{TemplateBinding Content}"
                                  ContentTemplate="{TemplateBinding ContentTemplate}"
                                  FlowDirection="LeftToRight" />
                <Grid.RenderTransform>
                  <TranslateTransform X="0" Y="0" />
                </Grid.RenderTransform>
              </Grid>
            </Grid>
          </Viewbox>
          <ControlTemplate.Triggers>
            <Trigger Property="IsChecked" Value="True">
              <Setter Property="Foreground" Value="{DynamicResource MaterialDesign.Brush.Primary.Foreground}" />
              <Setter TargetName="Thumb" Property="Fill" Value="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=Background}" />
              <Setter TargetName="Track" Property="Fill" Value="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=(wpf:ToggleButtonAssist.SwitchTrackOnBackground)}" />
            </Trigger>
            <MultiTrigger>
              <MultiTrigger.Conditions>
                <Condition Property="IsChecked" Value="True" />
                <Condition Property="wpf:ToggleButtonAssist.HasOnContent" Value="True" />
              </MultiTrigger.Conditions>
              <Setter TargetName="ContentPresenter" Property="Content" Value="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=(wpf:ToggleButtonAssist.OnContent)}" />
              <Setter TargetName="ContentPresenter" Property="ContentTemplate" Value="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=(wpf:ToggleButtonAssist.OnContentTemplate)}" />
            </MultiTrigger>
            <Trigger Property="IsChecked" Value="False">
              <Setter Property="Foreground" Value="{DynamicResource MaterialDesign.Brush.Primary}" />
              <!-- Need to set Foreground to Background here instead of hardcoded PrimaryHueMidBrush -->
            </Trigger>
            <Trigger Property="Button.IsDefaulted" Value="true" />
            <Trigger Property="IsMouseOver" Value="true" />
            <Trigger Property="IsPressed" Value="true">
              <Trigger.EnterActions>
                <BeginStoryboard Storyboard="{StaticResource ShowRipple}" />
              </Trigger.EnterActions>
              <Trigger.ExitActions>
                <BeginStoryboard Storyboard="{StaticResource HideRipple}" />
              </Trigger.ExitActions>
            </Trigger>
            <Trigger Property="IsEnabled" Value="false">
              <Setter TargetName="Thumb" Property="Fill" Value="#BDBDBD" />
              <Setter TargetName="Track" Property="Fill">
                <Setter.Value>
                  <SolidColorBrush Opacity=".12" Color="Black" />
                </Setter.Value>
              </Setter>
            </Trigger>
          </ControlTemplate.Triggers>
        </ControlTemplate>
      </Setter.Value>
    </Setter>
    <Setter Property="Validation.ErrorTemplate" Value="{StaticResource MaterialDesignValidationErrorTemplate}" />
    <Setter Property="Width" Value="34" />
    <Setter Property="wpf:ToggleButtonAssist.SwitchTrackOffBackground" Value="Black" />
    <Setter Property="wpf:ToggleButtonAssist.SwitchTrackOnBackground" Value="{DynamicResource MaterialDesign.Brush.Primary.Light}" />
  </Style>
 
  <Style x:Key="MaterialDesignSwitchLightToggleButton"
         TargetType="{x:Type ToggleButton}"
         BasedOn="{StaticResource MaterialDesignSwitchToggleButton}">
    <Setter Property="Background" Value="{DynamicResource MaterialDesign.Brush.Primary.Light}" />
  </Style>
 
  <Style x:Key="MaterialDesignSwitchDarkToggleButton"
         TargetType="{x:Type ToggleButton}"
         BasedOn="{StaticResource MaterialDesignSwitchToggleButton}">
    <Setter Property="Background" Value="{DynamicResource MaterialDesign.Brush.Primary.Dark}" />
  </Style>
 
  <Style x:Key="MaterialDesignSwitchSecondaryToggleButton"
         TargetType="{x:Type ToggleButton}"
         BasedOn="{StaticResource MaterialDesignSwitchToggleButton}">
    <Setter Property="Background" Value="{DynamicResource MaterialDesign.Brush.Secondary}" />
  </Style>
 
  <Style x:Key="MaterialDesignHamburgerToggleButton" TargetType="{x:Type ToggleButton}">
    <Setter Property="Background" Value="Transparent" />
    <Setter Property="BorderThickness" Value="1" />
    <Setter Property="FocusVisualStyle" Value="{StaticResource FocusVisual}" />
    <Setter Property="Foreground" Value="{Binding RelativeSource={RelativeSource AncestorType={x:Type FrameworkElement}}, Path=(TextElement.Foreground)}" />
    <Setter Property="Height" Value="37" />
    <Setter Property="HorizontalContentAlignment" Value="Center" />
    <Setter Property="Padding" Value="1" />
    <Setter Property="Template">
      <Setter.Value>
        <ControlTemplate TargetType="{x:Type ToggleButton}">
          <Border Background="{TemplateBinding Property=Background}">
            <VisualStateManager.VisualStateGroups>
              <VisualStateGroup x:Name="CommonStates">
                <VisualState Name="Normal" />
                <VisualState Name="Disabled">
                  <Storyboard>
                    <DoubleAnimation Storyboard.TargetProperty="(UIElement.Opacity)"
                                     To="0.38"
                                     Duration="0" />
                  </Storyboard>
                </VisualState>
              </VisualStateGroup>
              <VisualStateGroup x:Name="CheckStates">
                <VisualStateGroup.Transitions>
                  <VisualTransition From="*" To="Checked">
                    <Storyboard>
                      <DoubleAnimationUsingKeyFrames Storyboard.TargetName="rectangle" Storyboard.TargetProperty="(UIElement.RenderTransform).(TransformGroup.Children)[2].(RotateTransform.Angle)">
                        <EasingDoubleKeyFrame KeyTime="0:0:0.3" Value="45" />
                      </DoubleAnimationUsingKeyFrames>
                      <DoubleAnimationUsingKeyFrames Storyboard.TargetName="rectangle" Storyboard.TargetProperty="(UIElement.RenderTransform).(TransformGroup.Children)[0].(ScaleTransform.ScaleX)">
                        <EasingDoubleKeyFrame KeyTime="0:0:0.3" Value="0.581" />
                      </DoubleAnimationUsingKeyFrames>
                      <DoubleAnimationUsingKeyFrames Storyboard.TargetName="rectangle" Storyboard.TargetProperty="(UIElement.RenderTransform).(TransformGroup.Children)[3].(TranslateTransform.X)">
                        <EasingDoubleKeyFrame KeyTime="0:0:0.3" Value="4.875" />
                      </DoubleAnimationUsingKeyFrames>
                      <DoubleAnimationUsingKeyFrames Storyboard.TargetName="rectangle" Storyboard.TargetProperty="(UIElement.RenderTransform).(TransformGroup.Children)[3].(TranslateTransform.Y)">
                        <EasingDoubleKeyFrame KeyTime="0:0:0.3" Value="1.875" />
                      </DoubleAnimationUsingKeyFrames>
                      <DoubleAnimationUsingKeyFrames Storyboard.TargetName="rectangle2" Storyboard.TargetProperty="(UIElement.RenderTransform).(TransformGroup.Children)[2].(RotateTransform.Angle)">
                        <EasingDoubleKeyFrame KeyTime="0:0:0.3" Value="-45" />
                      </DoubleAnimationUsingKeyFrames>
                      <DoubleAnimationUsingKeyFrames Storyboard.TargetName="rectangle2" Storyboard.TargetProperty="(UIElement.RenderTransform).(TransformGroup.Children)[0].(ScaleTransform.ScaleX)">
                        <EasingDoubleKeyFrame KeyTime="0:0:0.3" Value="0.581" />
                      </DoubleAnimationUsingKeyFrames>
                      <DoubleAnimationUsingKeyFrames Storyboard.TargetName="rectangle2" Storyboard.TargetProperty="(UIElement.RenderTransform).(TransformGroup.Children)[3].(TranslateTransform.X)">
                        <EasingDoubleKeyFrame KeyTime="0:0:0.3" Value="4.832" />
                      </DoubleAnimationUsingKeyFrames>
                      <DoubleAnimationUsingKeyFrames Storyboard.TargetName="rectangle2" Storyboard.TargetProperty="(UIElement.RenderTransform).(TransformGroup.Children)[3].(TranslateTransform.Y)">
                        <EasingDoubleKeyFrame KeyTime="0:0:0.3" Value="-2.082" />
                      </DoubleAnimationUsingKeyFrames>
                      <DoubleAnimationUsingKeyFrames Storyboard.TargetName="rectangle1" Storyboard.TargetProperty="(UIElement.RenderTransform).(TransformGroup.Children)[0].(ScaleTransform.ScaleX)">
                        <EasingDoubleKeyFrame KeyTime="0:0:0.3" Value="0.889" />
                      </DoubleAnimationUsingKeyFrames>
                      <DoubleAnimationUsingKeyFrames Storyboard.TargetName="rectangle1" Storyboard.TargetProperty="(UIElement.RenderTransform).(TransformGroup.Children)[3].(TranslateTransform.X)">
                        <EasingDoubleKeyFrame KeyTime="0:0:0.3" Value="-1" />
                      </DoubleAnimationUsingKeyFrames>
                      <DoubleAnimationUsingKeyFrames Storyboard.TargetName="canvas" Storyboard.TargetProperty="(UIElement.RenderTransform).(TransformGroup.Children)[2].(RotateTransform.Angle)">
                        <EasingDoubleKeyFrame KeyTime="0" Value="0" />
                        <EasingDoubleKeyFrame KeyTime="0:0:0.3" Value="-180" />
                      </DoubleAnimationUsingKeyFrames>
                    </Storyboard>
                  </VisualTransition>
                  <VisualTransition From="Checked" To="Unchecked">
                    <Storyboard>
                      <DoubleAnimationUsingKeyFrames Storyboard.TargetName="rectangle" Storyboard.TargetProperty="(UIElement.RenderTransform).(TransformGroup.Children)[2].(RotateTransform.Angle)">
                        <EasingDoubleKeyFrame KeyTime="0:0:0.3" Value="0" />
                      </DoubleAnimationUsingKeyFrames>
                      <DoubleAnimationUsingKeyFrames Storyboard.TargetName="rectangle" Storyboard.TargetProperty="(UIElement.RenderTransform).(TransformGroup.Children)[0].(ScaleTransform.ScaleX)">
                        <EasingDoubleKeyFrame KeyTime="0:0:0.3" Value="1" />
                      </DoubleAnimationUsingKeyFrames>
                      <DoubleAnimationUsingKeyFrames Storyboard.TargetName="rectangle" Storyboard.TargetProperty="(UIElement.RenderTransform).(TransformGroup.Children)[3].(TranslateTransform.X)">
                        <EasingDoubleKeyFrame KeyTime="0:0:0.3" Value="0" />
                      </DoubleAnimationUsingKeyFrames>
                      <DoubleAnimationUsingKeyFrames Storyboard.TargetName="rectangle" Storyboard.TargetProperty="(UIElement.RenderTransform).(TransformGroup.Children)[3].(TranslateTransform.Y)">
                        <EasingDoubleKeyFrame KeyTime="0:0:0.3" Value="0" />
                      </DoubleAnimationUsingKeyFrames>
                      <DoubleAnimationUsingKeyFrames Storyboard.TargetName="rectangle2" Storyboard.TargetProperty="(UIElement.RenderTransform).(TransformGroup.Children)[2].(RotateTransform.Angle)">
                        <EasingDoubleKeyFrame KeyTime="0:0:0.3" Value="0" />
                      </DoubleAnimationUsingKeyFrames>
                      <DoubleAnimationUsingKeyFrames Storyboard.TargetName="rectangle2" Storyboard.TargetProperty="(UIElement.RenderTransform).(TransformGroup.Children)[0].(ScaleTransform.ScaleX)">
                        <EasingDoubleKeyFrame KeyTime="0:0:0.3" Value="1" />
                      </DoubleAnimationUsingKeyFrames>
                      <DoubleAnimationUsingKeyFrames Storyboard.TargetName="rectangle2" Storyboard.TargetProperty="(UIElement.RenderTransform).(TransformGroup.Children)[3].(TranslateTransform.X)">
                        <EasingDoubleKeyFrame KeyTime="0:0:0.3" Value="0" />
                      </DoubleAnimationUsingKeyFrames>
                      <DoubleAnimationUsingKeyFrames Storyboard.TargetName="rectangle2" Storyboard.TargetProperty="(UIElement.RenderTransform).(TransformGroup.Children)[3].(TranslateTransform.Y)">
                        <EasingDoubleKeyFrame KeyTime="0:0:0.3" Value="0" />
                      </DoubleAnimationUsingKeyFrames>
                      <DoubleAnimationUsingKeyFrames Storyboard.TargetName="rectangle1" Storyboard.TargetProperty="(UIElement.RenderTransform).(TransformGroup.Children)[0].(ScaleTransform.ScaleX)">
                        <EasingDoubleKeyFrame KeyTime="0:0:0.3" Value="1" />
                      </DoubleAnimationUsingKeyFrames>
                      <DoubleAnimationUsingKeyFrames Storyboard.TargetName="rectangle1" Storyboard.TargetProperty="(UIElement.RenderTransform).(TransformGroup.Children)[3].(TranslateTransform.X)">
                        <EasingDoubleKeyFrame KeyTime="0:0:0.3" Value="0" />
                      </DoubleAnimationUsingKeyFrames>
                      <DoubleAnimationUsingKeyFrames Storyboard.TargetName="canvas" Storyboard.TargetProperty="(UIElement.RenderTransform).(TransformGroup.Children)[2].(RotateTransform.Angle)">
                        <EasingDoubleKeyFrame KeyTime="0:0:0.3" Value="0" />
                      </DoubleAnimationUsingKeyFrames>
                    </Storyboard>
                  </VisualTransition>
                </VisualStateGroup.Transitions>
                <VisualState x:Name="Checked">
                  <Storyboard>
                    <DoubleAnimation Storyboard.TargetName="rectangle"
                                     Storyboard.TargetProperty="(UIElement.RenderTransform).(TransformGroup.Children)[2].(RotateTransform.Angle)"
                                     To="45"
                                     Duration="0" />
                    <DoubleAnimation Storyboard.TargetName="rectangle"
                                     Storyboard.TargetProperty="(UIElement.RenderTransform).(TransformGroup.Children)[0].(ScaleTransform.ScaleX)"
                                     To="0.581"
                                     Duration="0" />
                    <DoubleAnimation Storyboard.TargetName="rectangle"
                                     Storyboard.TargetProperty="(UIElement.RenderTransform).(TransformGroup.Children)[3].(TranslateTransform.X)"
                                     To="4.875"
                                     Duration="0" />
                    <DoubleAnimation Storyboard.TargetName="rectangle"
                                     Storyboard.TargetProperty="(UIElement.RenderTransform).(TransformGroup.Children)[3].(TranslateTransform.Y)"
                                     To="1.875"
                                     Duration="0" />
                    <DoubleAnimation Storyboard.TargetName="rectangle2"
                                     Storyboard.TargetProperty="(UIElement.RenderTransform).(TransformGroup.Children)[2].(RotateTransform.Angle)"
                                     To="-45"
                                     Duration="0" />
                    <DoubleAnimation Storyboard.TargetName="rectangle2"
                                     Storyboard.TargetProperty="(UIElement.RenderTransform).(TransformGroup.Children)[0].(ScaleTransform.ScaleX)"
                                     To="0.581"
                                     Duration="0" />
                    <DoubleAnimation Storyboard.TargetName="rectangle2"
                                     Storyboard.TargetProperty="(UIElement.RenderTransform).(TransformGroup.Children)[3].(TranslateTransform.X)"
                                     To="4.832"
                                     Duration="0" />
                    <DoubleAnimation Storyboard.TargetName="rectangle2"
                                     Storyboard.TargetProperty="(UIElement.RenderTransform).(TransformGroup.Children)[3].(TranslateTransform.Y)"
                                     To="-2.082"
                                     Duration="0" />
                    <DoubleAnimation Storyboard.TargetName="rectangle1"
                                     Storyboard.TargetProperty="(UIElement.RenderTransform).(TransformGroup.Children)[0].(ScaleTransform.ScaleX)"
                                     To="0.889"
                                     Duration="0" />
                    <DoubleAnimation Storyboard.TargetName="rectangle1"
                                     Storyboard.TargetProperty="(UIElement.RenderTransform).(TransformGroup.Children)[3].(TranslateTransform.X)"
                                     To="-1"
                                     Duration="0" />
                    <DoubleAnimation Storyboard.TargetName="canvas"
                                     Storyboard.TargetProperty="(UIElement.RenderTransform).(TransformGroup.Children)[2].(RotateTransform.Angle)"
                                     To="-180"
                                     Duration="0" />
                  </Storyboard>
                </VisualState>
                <VisualState x:Name="Unchecked">
                  <Storyboard>
                    <DoubleAnimation Storyboard.TargetName="rectangle"
                                     Storyboard.TargetProperty="(UIElement.RenderTransform).(TransformGroup.Children)[2].(RotateTransform.Angle)"
                                     To="0"
                                     Duration="0" />
                    <DoubleAnimation Storyboard.TargetName="rectangle"
                                     Storyboard.TargetProperty="(UIElement.RenderTransform).(TransformGroup.Children)[0].(ScaleTransform.ScaleX)"
                                     To="1"
                                     Duration="0" />
                    <DoubleAnimation Storyboard.TargetName="rectangle"
                                     Storyboard.TargetProperty="(UIElement.RenderTransform).(TransformGroup.Children)[3].(TranslateTransform.X)"
                                     To="0"
                                     Duration="0" />
                    <DoubleAnimation Storyboard.TargetName="rectangle"
                                     Storyboard.TargetProperty="(UIElement.RenderTransform).(TransformGroup.Children)[3].(TranslateTransform.Y)"
                                     To="0"
                                     Duration="0" />
                    <DoubleAnimation Storyboard.TargetName="rectangle2"
                                     Storyboard.TargetProperty="(UIElement.RenderTransform).(TransformGroup.Children)[2].(RotateTransform.Angle)"
                                     To="0"
                                     Duration="0" />
                    <DoubleAnimation Storyboard.TargetName="rectangle2"
                                     Storyboard.TargetProperty="(UIElement.RenderTransform).(TransformGroup.Children)[0].(ScaleTransform.ScaleX)"
                                     To="1"
                                     Duration="0" />
                    <DoubleAnimation Storyboard.TargetName="rectangle2"
                                     Storyboard.TargetProperty="(UIElement.RenderTransform).(TransformGroup.Children)[3].(TranslateTransform.X)"
                                     To="0"
                                     Duration="0" />
                    <DoubleAnimation Storyboard.TargetName="rectangle2"
                                     Storyboard.TargetProperty="(UIElement.RenderTransform).(TransformGroup.Children)[3].(TranslateTransform.Y)"
                                     To="0"
                                     Duration="0" />
                    <DoubleAnimation Storyboard.TargetName="rectangle1"
                                     Storyboard.TargetProperty="(UIElement.RenderTransform).(TransformGroup.Children)[0].(ScaleTransform.ScaleX)"
                                     To="1"
                                     Duration="0" />
                    <DoubleAnimation Storyboard.TargetName="rectangle1"
                                     Storyboard.TargetProperty="(UIElement.RenderTransform).(TransformGroup.Children)[3].(TranslateTransform.X)"
                                     To="0"
                                     Duration="0" />
                    <DoubleAnimation Storyboard.TargetName="canvas"
                                     Storyboard.TargetProperty="(UIElement.RenderTransform).(TransformGroup.Children)[2].(RotateTransform.Angle)"
                                     To="0"
                                     Duration="0" />
                  </Storyboard>
                </VisualState>
              </VisualStateGroup>
            </VisualStateManager.VisualStateGroups>
            <Viewbox>
              <Canvas x:Name="canvas"
                      Width="24"
                      Height="24"
                      RenderTransformOrigin="0.5,0.5">
                <Canvas.RenderTransform>
                  <TransformGroup>
                    <ScaleTransform />
                    <SkewTransform />
                    <RotateTransform />
                    <TranslateTransform />
                  </TransformGroup>
                </Canvas.RenderTransform>
                <Rectangle x:Name="rectangle"
                           Canvas.Left="3"
                           Canvas.Top="6"
                           Width="18"
                           Height="2"
                           Fill="{TemplateBinding Foreground}"
                           RadiusX="0"
                           RadiusY="0"
                           RenderTransformOrigin="0.5,0.5">
                  <Rectangle.RenderTransform>
                    <TransformGroup>
                      <ScaleTransform />
                      <SkewTransform />
                      <RotateTransform />
                      <TranslateTransform />
                    </TransformGroup>
                  </Rectangle.RenderTransform>
                </Rectangle>
                <Rectangle x:Name="rectangle1"
                           Canvas.Left="3"
                           Canvas.Top="11"
                           Width="18"
                           Height="2"
                           Fill="{TemplateBinding Foreground}"
                           RadiusX="0"
                           RadiusY="0"
                           RenderTransformOrigin="0.5,0.5">
                  <Rectangle.RenderTransform>
                    <TransformGroup>
                      <ScaleTransform />
                      <SkewTransform />
                      <RotateTransform />
                      <TranslateTransform />
                    </TransformGroup>
                  </Rectangle.RenderTransform>
                </Rectangle>
                <Rectangle x:Name="rectangle2"
                           Canvas.Left="3"
                           Canvas.Top="16"
                           Width="18"
                           Height="2"
                           Fill="{TemplateBinding Foreground}"
                           RadiusX="0"
                           RadiusY="0"
                           RenderTransformOrigin="0.5,0.5">
                  <Rectangle.RenderTransform>
                    <TransformGroup>
                      <ScaleTransform />
                      <SkewTransform />
                      <RotateTransform />
                      <TranslateTransform />
                    </TransformGroup>
                  </Rectangle.RenderTransform>
                </Rectangle>
              </Canvas>
            </Viewbox>
          </Border>
          <ControlTemplate.Triggers>
            <Trigger Property="Button.IsDefaulted" Value="true" />
          </ControlTemplate.Triggers>
        </ControlTemplate>
      </Setter.Value>
    </Setter>
    <Setter Property="VerticalContentAlignment" Value="Center" />
    <Setter Property="Width" Value="37" />
  </Style>
 
</ResourceDictionary>