Themes/MaterialDesignTheme.Button.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:po="http://schemas.microsoft.com/winfx/2006/xaml/presentation/options"
                    xmlns:system="clr-namespace:System;assembly=mscorlib"
                    xmlns:wpf="clr-namespace:MaterialDesignThemes.Wpf">
 
  <ResourceDictionary.MergedDictionaries>
    <ResourceDictionary Source="pack://application:,,,/MaterialDesignThemes.Wpf;component/Themes/MaterialDesignTheme.Shadows.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>
 
  <converters:RangeLengthConverter x:Key="RangeLengthConverter" />
  <converters:MathConverter x:Key="MathAddConverter" Operation="Add" />
  <system:Int32 x:Key="ProgressRingStrokeWidth">8</system:Int32>
 
  <!--#region Raised Button-->
 
  <Style x:Key="MaterialDesignRaisedButton" TargetType="{x:Type ButtonBase}">
    <Setter Property="Background" Value="{DynamicResource MaterialDesign.Brush.Primary}" />
    <Setter Property="BorderBrush" Value="{DynamicResource MaterialDesign.Brush.Primary}" />
    <Setter Property="BorderThickness" Value="1" />
    <Setter Property="Cursor" Value="Hand" />
    <Setter Property="FocusVisualStyle" Value="{StaticResource FocusVisual}" />
    <Setter Property="Foreground" Value="{DynamicResource MaterialDesign.Brush.Primary.Foreground}" />
    <Setter Property="Height" Value="32" />
    <Setter Property="HorizontalContentAlignment" Value="Center" />
    <Setter Property="Padding" Value="16,4,16,4" />
    <Setter Property="Template">
      <Setter.Value>
        <ControlTemplate TargetType="{x:Type ButtonBase}">
          <Grid>
            <AdornerDecorator CacheMode="{Binding RelativeSource={RelativeSource Self}, Path=(wpf:ShadowAssist.CacheMode)}">
              <Grid>
                <Border x:Name="border"
                        Background="{TemplateBinding Background}"
                        BorderBrush="{TemplateBinding BorderBrush}"
                        BorderThickness="{TemplateBinding BorderThickness}"
                        CornerRadius="{Binding Path=(wpf:ButtonAssist.CornerRadius), RelativeSource={RelativeSource TemplatedParent}}"
                        Effect="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=(wpf:ElevationAssist.Elevation), Converter={x:Static converters:ShadowConverter.Instance}}" />
                <ProgressBar x:Name="ProgressBar"
                             Width="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type ButtonBase}}, Path=ActualWidth}"
                             Height="{TemplateBinding Height}"
                             HorizontalAlignment="Left"
                             VerticalAlignment="Center"
                             Background="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=(wpf:ButtonProgressAssist.IndicatorBackground)}"
                             BorderBrush="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=(wpf:ButtonProgressAssist.IndicatorBackground)}"
                             Foreground="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=(wpf:ButtonProgressAssist.IndicatorForeground)}"
                             IsIndeterminate="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=(wpf:ButtonProgressAssist.IsIndeterminate)}"
                             Maximum="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=(wpf:ButtonProgressAssist.Maximum)}"
                             Minimum="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=(wpf:ButtonProgressAssist.Minimum)}"
                             Opacity="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=(wpf:ButtonProgressAssist.Opacity)}"
                             Style="{DynamicResource MaterialDesignLinearProgressBar}"
                             Visibility="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=(wpf:ButtonProgressAssist.IsIndicatorVisible), Converter={x:Static converters:BooleanToVisibilityConverter.CollapsedInstance}}"
                             Value="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=(wpf:ButtonProgressAssist.Value)}">
                  <ProgressBar.Clip>
                    <MultiBinding Converter="{x:Static converters:BorderClipConverter.Instance}">
                      <Binding ElementName="border" Path="ActualWidth" />
                      <Binding ElementName="border" Path="ActualHeight" />
                      <Binding ElementName="border" Path="CornerRadius" />
                      <Binding ElementName="border" Path="BorderThickness" />
                    </MultiBinding>
                  </ProgressBar.Clip>
                </ProgressBar>
              </Grid>
            </AdornerDecorator>
            <wpf:Ripple Padding="{TemplateBinding Padding}"
                        HorizontalContentAlignment="{TemplateBinding HorizontalContentAlignment}"
                        VerticalContentAlignment="{TemplateBinding VerticalContentAlignment}"
                        Content="{TemplateBinding Content}"
                        ContentStringFormat="{TemplateBinding ContentStringFormat}"
                        ContentTemplate="{TemplateBinding ContentTemplate}"
                        Focusable="False"
                        SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}">
              <wpf:Ripple.Clip>
                <MultiBinding Converter="{x:Static converters:BorderClipConverter.Instance}">
                  <Binding ElementName="border" Path="ActualWidth" />
                  <Binding ElementName="border" Path="ActualHeight" />
                  <Binding ElementName="border" Path="CornerRadius" />
                  <Binding ElementName="border" Path="BorderThickness" />
                </MultiBinding>
              </wpf:Ripple.Clip>
            </wpf:Ripple>
          </Grid>
          <ControlTemplate.Triggers>
            <Trigger Property="IsMouseOver" Value="true">
              <Setter TargetName="border" Property="wpf:ShadowAssist.Darken" Value="True" />
            </Trigger>
            <Trigger Property="IsKeyboardFocused" Value="true">
              <Setter TargetName="border" Property="wpf:ShadowAssist.Darken" Value="True" />
            </Trigger>
            <Trigger Property="IsEnabled" Value="false">
              <Setter Property="Opacity" Value="0.38" />
            </Trigger>
          </ControlTemplate.Triggers>
        </ControlTemplate>
      </Setter.Value>
    </Setter>
    <Setter Property="TextBlock.FontSize" Value="14" />
    <Setter Property="TextBlock.FontWeight" Value="Medium" />
    <Setter Property="VerticalContentAlignment" Value="Center" />
    <Setter Property="wpf:ButtonAssist.CornerRadius" Value="2" />
    <Setter Property="wpf:ButtonProgressAssist.IndicatorBackground" Value="{DynamicResource MaterialDesign.Brush.Primary}" />
    <Setter Property="wpf:ButtonProgressAssist.IndicatorForeground" Value="{DynamicResource MaterialDesign.Brush.Primary.Foreground}" />
    <Setter Property="wpf:ButtonProgressAssist.IsIndicatorVisible" Value="False" />
    <Setter Property="wpf:ButtonProgressAssist.Opacity" Value=".4" />
    <Setter Property="wpf:ElevationAssist.Elevation" Value="Dp2" />
    <Setter Property="wpf:RippleAssist.Feedback" Value="White" />
  </Style>
 
  <Style x:Key="MaterialDesignRaisedLightButton"
         TargetType="{x:Type ButtonBase}"
         BasedOn="{StaticResource MaterialDesignRaisedButton}">
    <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="MaterialDesignRaisedDarkButton"
         TargetType="{x:Type ButtonBase}"
         BasedOn="{StaticResource MaterialDesignRaisedButton}">
    <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="MaterialDesignRaisedSecondaryButton"
         TargetType="{x:Type ButtonBase}"
         BasedOn="{StaticResource MaterialDesignRaisedButton}">
    <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="MaterialDesignRaisedSecondaryLightButton"
         TargetType="{x:Type ButtonBase}"
         BasedOn="{StaticResource MaterialDesignRaisedButton}">
    <Setter Property="Background" Value="{DynamicResource MaterialDesign.Brush.Secondary.Light}" />
    <Setter Property="BorderBrush" Value="{DynamicResource MaterialDesign.Brush.Secondary.Light}" />
    <Setter Property="Foreground" Value="{DynamicResource MaterialDesign.Brush.Secondary.Light.Foreground}" />
  </Style>
 
  <Style x:Key="MaterialDesignRaisedSecondaryDarkButton"
         TargetType="{x:Type ButtonBase}"
         BasedOn="{StaticResource MaterialDesignRaisedButton}">
    <Setter Property="Background" Value="{DynamicResource MaterialDesign.Brush.Secondary.Dark}" />
    <Setter Property="BorderBrush" Value="{DynamicResource MaterialDesign.Brush.Secondary.Dark}" />
    <Setter Property="Foreground" Value="{DynamicResource MaterialDesign.Brush.Secondary.Dark.Foreground}" />
  </Style>
 
  <!--#endregion-->
  <!--#region Flat Button-->
  <Style x:Key="MaterialDesignFlatButton" TargetType="{x:Type ButtonBase}">
    <Setter Property="Background" Value="Transparent" />
    <Setter Property="BorderBrush" Value="Transparent" />
    <Setter Property="BorderThickness" Value="0" />
    <Setter Property="Cursor" Value="Hand" />
    <Setter Property="FocusVisualStyle" Value="{StaticResource FocusVisual}" />
    <Setter Property="Foreground" Value="{DynamicResource MaterialDesign.Brush.Primary}" />
    <Setter Property="Height" Value="32" />
    <Setter Property="HorizontalContentAlignment" Value="Center" />
    <Setter Property="Padding" Value="16,4,16,4" />
    <Setter Property="Template">
      <Setter.Value>
        <ControlTemplate TargetType="{x:Type ButtonBase}">
          <Grid>
            <Border x:Name="border"
                    Background="{TemplateBinding Background}"
                    BorderBrush="{TemplateBinding BorderBrush}"
                    BorderThickness="{TemplateBinding BorderThickness}"
                    CornerRadius="{Binding Path=(wpf:ButtonAssist.CornerRadius), RelativeSource={RelativeSource TemplatedParent}}" />
            <ProgressBar x:Name="ProgressBar"
                         Width="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type ButtonBase}}, Path=ActualWidth}"
                         Height="{TemplateBinding Height}"
                         HorizontalAlignment="Left"
                         VerticalAlignment="Center"
                         Background="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=(wpf:ButtonProgressAssist.IndicatorBackground)}"
                         BorderBrush="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=(wpf:ButtonProgressAssist.IndicatorBackground)}"
                         Foreground="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=(wpf:ButtonProgressAssist.IndicatorForeground)}"
                         IsIndeterminate="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=(wpf:ButtonProgressAssist.IsIndeterminate)}"
                         Maximum="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=(wpf:ButtonProgressAssist.Maximum)}"
                         Minimum="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=(wpf:ButtonProgressAssist.Minimum)}"
                         Opacity="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=(wpf:ButtonProgressAssist.Opacity)}"
                         Style="{DynamicResource MaterialDesignLinearProgressBar}"
                         Visibility="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=(wpf:ButtonProgressAssist.IsIndicatorVisible), Converter={x:Static converters:BooleanToVisibilityConverter.CollapsedInstance}}"
                         Value="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=(wpf:ButtonProgressAssist.Value)}">
              <ProgressBar.Clip>
                <MultiBinding Converter="{x:Static converters:BorderClipConverter.Instance}">
                  <Binding ElementName="border" Path="ActualWidth" />
                  <Binding ElementName="border" Path="ActualHeight" />
                  <Binding ElementName="border" Path="CornerRadius" />
                  <Binding ElementName="border" Path="BorderThickness" />
                </MultiBinding>
              </ProgressBar.Clip>
            </ProgressBar>
 
            <wpf:Ripple Padding="{TemplateBinding Padding}"
                        HorizontalContentAlignment="{TemplateBinding HorizontalContentAlignment}"
                        VerticalContentAlignment="{TemplateBinding VerticalContentAlignment}"
                        Content="{TemplateBinding Content}"
                        ContentStringFormat="{TemplateBinding ContentStringFormat}"
                        ContentTemplate="{TemplateBinding ContentTemplate}"
                        Focusable="False"
                        SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}">
              <wpf:Ripple.Clip>
                <MultiBinding Converter="{x:Static converters:BorderClipConverter.Instance}">
                  <Binding ElementName="border" Path="ActualWidth" />
                  <Binding ElementName="border" Path="ActualHeight" />
                  <Binding ElementName="border" Path="CornerRadius" />
                  <Binding ElementName="border" Path="BorderThickness" />
                </MultiBinding>
              </wpf:Ripple.Clip>
            </wpf:Ripple>
          </Grid>
          <ControlTemplate.Triggers>
            <Trigger Property="IsMouseOver" Value="true">
              <Setter TargetName="border" Property="Background" Value="{Binding Foreground, RelativeSource={RelativeSource Mode=TemplatedParent}, Converter={x:Static converters:BrushOpacityConverter.Instance}, ConverterParameter=0.16}" />
            </Trigger>
            <Trigger Property="IsEnabled" Value="false">
              <Setter Property="Opacity" Value="0.38" />
            </Trigger>
          </ControlTemplate.Triggers>
        </ControlTemplate>
      </Setter.Value>
    </Setter>
    <Setter Property="TextBlock.FontSize" Value="14" />
    <Setter Property="TextBlock.FontWeight" Value="Medium" />
    <Setter Property="VerticalContentAlignment" Value="Center" />
    <Setter Property="wpf:ButtonAssist.CornerRadius" Value="2" />
    <Setter Property="wpf:ButtonProgressAssist.IndicatorBackground" Value="Transparent" />
    <Setter Property="wpf:ButtonProgressAssist.IndicatorForeground" Value="{DynamicResource MaterialDesign.Brush.Primary}" />
    <Setter Property="wpf:ButtonProgressAssist.IsIndicatorVisible" Value="False" />
    <Setter Property="wpf:ButtonProgressAssist.Opacity" Value=".4" />
    <Setter Property="wpf:RippleAssist.Feedback" Value="{DynamicResource MaterialDesign.Brush.Primary}" />
  </Style>
 
  <Style x:Key="MaterialDesignFlatLightButton"
         TargetType="{x:Type ButtonBase}"
         BasedOn="{StaticResource MaterialDesignFlatButton}">
    <Setter Property="Foreground" Value="{DynamicResource MaterialDesign.Brush.Primary.Light}" />
    <Setter Property="wpf:RippleAssist.Feedback" Value="{DynamicResource MaterialDesign.Brush.Primary.Light}" />
  </Style>
 
  <Style x:Key="MaterialDesignFlatDarkButton"
         TargetType="{x:Type ButtonBase}"
         BasedOn="{StaticResource MaterialDesignFlatButton}">
    <Setter Property="Foreground" Value="{DynamicResource MaterialDesign.Brush.Primary.Dark}" />
    <Setter Property="wpf:RippleAssist.Feedback" Value="{DynamicResource MaterialDesign.Brush.Primary.Dark}" />
  </Style>
 
  <Style x:Key="MaterialDesignFlatSecondaryButton"
         TargetType="{x:Type ButtonBase}"
         BasedOn="{StaticResource MaterialDesignFlatButton}">
    <Setter Property="Foreground" Value="{DynamicResource MaterialDesign.Brush.Secondary}" />
    <Setter Property="wpf:ButtonProgressAssist.IndicatorBackground" Value="{DynamicResource MaterialDesign.Brush.Secondary}" />
    <Setter Property="wpf:ButtonProgressAssist.IndicatorForeground" Value="{DynamicResource MaterialDesign.Brush.Secondary.Foreground}" />
    <Setter Property="wpf:RippleAssist.Feedback" Value="{DynamicResource MaterialDesign.Brush.Secondary}" />
  </Style>
 
  <Style x:Key="MaterialDesignFlatSecondaryLightButton"
         TargetType="{x:Type ButtonBase}"
         BasedOn="{StaticResource MaterialDesignFlatSecondaryButton}">
    <Setter Property="Foreground" Value="{DynamicResource MaterialDesign.Brush.Secondary.Light}" />
    <Setter Property="wpf:RippleAssist.Feedback" Value="{DynamicResource MaterialDesign.Brush.Secondary.Light}" />
  </Style>
 
  <Style x:Key="MaterialDesignFlatSecondaryDarkButton"
         TargetType="{x:Type ButtonBase}"
         BasedOn="{StaticResource MaterialDesignFlatSecondaryButton}">
    <Setter Property="Foreground" Value="{DynamicResource MaterialDesign.Brush.Secondary.Dark}" />
    <Setter Property="wpf:RippleAssist.Feedback" Value="{DynamicResource MaterialDesign.Brush.Secondary.Dark}" />
  </Style>
 
  <Style x:Key="MaterialDesignFlatLightBgButton"
         TargetType="{x:Type ButtonBase}"
         BasedOn="{StaticResource MaterialDesignRaisedLightButton}">
    <Setter Property="wpf:ElevationAssist.Elevation" Value="Dp0" />
  </Style>
 
  <!--#endregion-->
  <!--#region Flat Background Button-->
 
  <Style x:Key="MaterialDesignFlatMidBgButton"
         TargetType="{x:Type ButtonBase}"
         BasedOn="{StaticResource MaterialDesignRaisedButton}">
    <Setter Property="wpf:ElevationAssist.Elevation" Value="Dp0" />
  </Style>
 
  <Style x:Key="MaterialDesignFlatDarkBgButton"
         TargetType="{x:Type ButtonBase}"
         BasedOn="{StaticResource MaterialDesignRaisedDarkButton}">
    <Setter Property="wpf:ElevationAssist.Elevation" Value="Dp0" />
  </Style>
 
  <Style x:Key="MaterialDesignFlatSecondaryLightBgButton"
         TargetType="{x:Type ButtonBase}"
         BasedOn="{StaticResource MaterialDesignRaisedSecondaryLightButton}">
    <Setter Property="wpf:ElevationAssist.Elevation" Value="Dp0" />
  </Style>
 
  <Style x:Key="MaterialDesignFlatSecondaryMidBgButton"
         TargetType="{x:Type ButtonBase}"
         BasedOn="{StaticResource MaterialDesignRaisedSecondaryButton}">
    <Setter Property="wpf:ElevationAssist.Elevation" Value="Dp0" />
  </Style>
 
  <Style x:Key="MaterialDesignFlatSecondaryDarkBgButton"
         TargetType="{x:Type ButtonBase}"
         BasedOn="{StaticResource MaterialDesignRaisedSecondaryDarkButton}">
    <Setter Property="wpf:ElevationAssist.Elevation" Value="Dp0" />
  </Style>
 
  <!--#endregion-->
  <!--#region Outlined Button-->
 
  <Style x:Key="MaterialDesignOutlinedButton"
         TargetType="{x:Type ButtonBase}"
         BasedOn="{StaticResource MaterialDesignFlatButton}">
    <Setter Property="BorderBrush" Value="{DynamicResource MaterialDesign.Brush.Primary}" />
    <Setter Property="BorderThickness" Value="1" />
    <Setter Property="Template">
      <Setter.Value>
        <ControlTemplate TargetType="{x:Type ButtonBase}">
          <Grid>
            <Border x:Name="border"
                    Background="{TemplateBinding Background}"
                    BorderBrush="{TemplateBinding BorderBrush}"
                    BorderThickness="{TemplateBinding BorderThickness}"
                    CornerRadius="{Binding Path=(wpf:ButtonAssist.CornerRadius), RelativeSource={RelativeSource TemplatedParent}}" />
            <ProgressBar x:Name="ProgressBar"
                         Width="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type ButtonBase}}, Path=ActualWidth}"
                         Height="{TemplateBinding Height}"
                         HorizontalAlignment="Left"
                         VerticalAlignment="Center"
                         Background="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=(wpf:ButtonProgressAssist.IndicatorBackground)}"
                         BorderBrush="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=(wpf:ButtonProgressAssist.IndicatorBackground)}"
                         Foreground="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=(wpf:ButtonProgressAssist.IndicatorForeground)}"
                         IsIndeterminate="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=(wpf:ButtonProgressAssist.IsIndeterminate)}"
                         Maximum="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=(wpf:ButtonProgressAssist.Maximum)}"
                         Minimum="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=(wpf:ButtonProgressAssist.Minimum)}"
                         Opacity="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=(wpf:ButtonProgressAssist.Opacity)}"
                         Style="{DynamicResource MaterialDesignLinearProgressBar}"
                         Visibility="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=(wpf:ButtonProgressAssist.IsIndicatorVisible), Converter={x:Static converters:BooleanToVisibilityConverter.CollapsedInstance}}"
                         Value="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=(wpf:ButtonProgressAssist.Value)}">
              <ProgressBar.Clip>
                <MultiBinding Converter="{x:Static converters:BorderClipConverter.Instance}">
                  <Binding ElementName="border" Path="ActualWidth" />
                  <Binding ElementName="border" Path="ActualHeight" />
                  <Binding ElementName="border" Path="CornerRadius" />
                  <Binding ElementName="border" Path="BorderThickness" />
                </MultiBinding>
              </ProgressBar.Clip>
            </ProgressBar>
 
            <wpf:Ripple Padding="{TemplateBinding Padding}"
                        HorizontalContentAlignment="{TemplateBinding HorizontalContentAlignment}"
                        VerticalContentAlignment="{TemplateBinding VerticalContentAlignment}"
                        Content="{TemplateBinding Content}"
                        ContentStringFormat="{TemplateBinding ContentStringFormat}"
                        ContentTemplate="{TemplateBinding ContentTemplate}"
                        Focusable="False"
                        SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}">
              <wpf:Ripple.Clip>
                <MultiBinding Converter="{x:Static converters:BorderClipConverter.Instance}">
                  <Binding ElementName="border" Path="ActualWidth" />
                  <Binding ElementName="border" Path="ActualHeight" />
                  <Binding ElementName="border" Path="CornerRadius" />
                  <Binding ElementName="border" Path="BorderThickness" />
                </MultiBinding>
              </wpf:Ripple.Clip>
            </wpf:Ripple>
          </Grid>
          <ControlTemplate.Triggers>
            <Trigger Property="IsMouseOver" Value="true">
              <Setter TargetName="border" Property="Background" Value="{Binding Foreground, RelativeSource={RelativeSource Mode=TemplatedParent}, Converter={x:Static converters:BrushOpacityConverter.Instance}, ConverterParameter=0.16}" />
 
            </Trigger>
            <Trigger Property="IsEnabled" Value="false">
              <Setter Property="Opacity" Value="0.38" />
            </Trigger>
          </ControlTemplate.Triggers>
        </ControlTemplate>
      </Setter.Value>
    </Setter>
    <Setter Property="wpf:ButtonAssist.CornerRadius" Value="2" />
  </Style>
 
  <Style x:Key="MaterialDesignOutlinedLightButton"
         TargetType="{x:Type ButtonBase}"
         BasedOn="{StaticResource MaterialDesignOutlinedButton}">
    <Setter Property="BorderBrush" Value="{DynamicResource MaterialDesign.Brush.Primary.Light}" />
    <Setter Property="Foreground" Value="{DynamicResource MaterialDesign.Brush.Primary.Light}" />
    <Setter Property="wpf:RippleAssist.Feedback" Value="{DynamicResource MaterialDesign.Brush.Primary.Light}" />
  </Style>
 
  <Style x:Key="MaterialDesignOutlinedDarkButton"
         TargetType="{x:Type ButtonBase}"
         BasedOn="{StaticResource MaterialDesignOutlinedButton}">
    <Setter Property="BorderBrush" Value="{DynamicResource MaterialDesign.Brush.Primary.Dark}" />
    <Setter Property="Foreground" Value="{DynamicResource MaterialDesign.Brush.Primary.Dark}" />
    <Setter Property="wpf:RippleAssist.Feedback" Value="{DynamicResource MaterialDesign.Brush.Primary.Dark}" />
  </Style>
 
  <Style x:Key="MaterialDesignOutlinedSecondaryButton"
         TargetType="{x:Type ButtonBase}"
         BasedOn="{StaticResource MaterialDesignOutlinedButton}">
    <Setter Property="BorderBrush" Value="{DynamicResource MaterialDesign.Brush.Secondary}" />
    <Setter Property="Foreground" Value="{DynamicResource MaterialDesign.Brush.Secondary}" />
    <Setter Property="wpf:ButtonProgressAssist.IndicatorBackground" Value="{DynamicResource MaterialDesign.Brush.Secondary}" />
    <Setter Property="wpf:ButtonProgressAssist.IndicatorForeground" Value="{DynamicResource MaterialDesign.Brush.Secondary.Foreground}" />
    <Setter Property="wpf:RippleAssist.Feedback" Value="{DynamicResource MaterialDesign.Brush.Secondary}" />
  </Style>
 
  <Style x:Key="MaterialDesignOutlinedSecondaryLightButton"
         TargetType="{x:Type ButtonBase}"
         BasedOn="{StaticResource MaterialDesignOutlinedSecondaryButton}">
    <Setter Property="BorderBrush" Value="{DynamicResource MaterialDesign.Brush.Secondary.Light}" />
    <Setter Property="Foreground" Value="{DynamicResource MaterialDesign.Brush.Secondary.Light}" />
    <Setter Property="wpf:RippleAssist.Feedback" Value="{DynamicResource MaterialDesign.Brush.Secondary.Light}" />
  </Style>
 
  <Style x:Key="MaterialDesignOutlinedSecondaryDarkButton"
         TargetType="{x:Type ButtonBase}"
         BasedOn="{StaticResource MaterialDesignOutlinedSecondaryButton}">
    <Setter Property="BorderBrush" Value="{DynamicResource MaterialDesign.Brush.Secondary.Dark}" />
    <Setter Property="Foreground" Value="{DynamicResource MaterialDesign.Brush.Secondary.Dark}" />
    <Setter Property="wpf:RippleAssist.Feedback" Value="{DynamicResource MaterialDesign.Brush.Secondary.Dark}" />
  </Style>
 
  <!--#endregion-->
  <!--#region Tool Button-->
 
  <Style x:Key="MaterialDesignToolButton"
         TargetType="{x:Type ButtonBase}"
         BasedOn="{StaticResource MaterialDesignFlatButton}">
    <Setter Property="Foreground" Value="{DynamicResource MaterialDesign.Brush.ToolBar.Item.Foreground}" />
    <Setter Property="Padding" Value="4" />
    <Setter Property="Template">
      <Setter.Value>
        <ControlTemplate TargetType="ButtonBase">
          <wpf:Ripple Padding="{TemplateBinding Padding}"
                      HorizontalContentAlignment="{TemplateBinding HorizontalContentAlignment}"
                      VerticalContentAlignment="{TemplateBinding VerticalContentAlignment}"
                      Content="{TemplateBinding Content}"
                      ContentStringFormat="{TemplateBinding ContentStringFormat}"
                      ContentTemplate="{TemplateBinding ContentTemplate}"
                      Focusable="False"
                      SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" />
          <ControlTemplate.Triggers>
            <Trigger Property="IsEnabled" Value="false">
              <Setter Property="Opacity" Value="0.38" />
            </Trigger>
          </ControlTemplate.Triggers>
        </ControlTemplate>
      </Setter.Value>
    </Setter>
    <Setter Property="wpf:RippleAssist.ClipToBounds" Value="False" />
    <Setter Property="wpf:RippleAssist.IsCentered" Value="True" />
  </Style>
 
  <Style x:Key="MaterialDesignToolForegroundButton"
         TargetType="{x:Type ButtonBase}"
         BasedOn="{StaticResource MaterialDesignToolButton}">
    <Setter Property="Foreground" Value="{Binding RelativeSource={RelativeSource AncestorType={x:Type FrameworkElement}}, Path=(TextElement.Foreground)}" />
    <Setter Property="wpf:RippleAssist.Feedback" Value="{Binding RelativeSource={RelativeSource AncestorType={x:Type FrameworkElement}}, Path=(TextElement.Foreground)}" />
  </Style>
 
  <!--#endregion-->
  <!--#region FAB-->
 
  <Style x:Key="MaterialDesignFloatingActionMiniButton" TargetType="{x:Type ButtonBase}">
    <Setter Property="Background" Value="{DynamicResource MaterialDesign.Brush.Primary}" />
    <Setter Property="BorderBrush" Value="{DynamicResource MaterialDesign.Brush.Primary}" />
    <Setter Property="BorderThickness" Value="1" />
    <Setter Property="Cursor" Value="Hand" />
    <Setter Property="FocusVisualStyle" Value="{StaticResource FocusVisual}" />
    <Setter Property="Foreground" Value="{DynamicResource MaterialDesign.Brush.Primary.Foreground}" />
    <Setter Property="Height" Value="40" />
    <Setter Property="HorizontalContentAlignment" Value="Center" />
    <Setter Property="Padding" Value="1" />
    <Setter Property="Template">
      <Setter.Value>
        <ControlTemplate TargetType="{x:Type ButtonBase}">
          <Grid>
            <AdornerDecorator CacheMode="{Binding RelativeSource={RelativeSource Self}, Path=(wpf:ShadowAssist.CacheMode)}">
              <Ellipse x:Name="border"
                       Effect="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=(wpf:ElevationAssist.Elevation), Converter={x:Static converters:ShadowConverter.Instance}}"
                       Fill="{TemplateBinding Background}"
                       Stroke="{TemplateBinding BorderBrush}"
                       StrokeThickness="{TemplateBinding BorderThickness}" />
            </AdornerDecorator>
            <ProgressBar x:Name="ProgressBar"
                         Width="{TemplateBinding Width, Converter={StaticResource MathAddConverter}, ConverterParameter={StaticResource ProgressRingStrokeWidth}}"
                         Height="{TemplateBinding Height, Converter={StaticResource MathAddConverter}, ConverterParameter={StaticResource ProgressRingStrokeWidth}}"
                         Margin="-8"
                         HorizontalAlignment="Stretch"
                         VerticalAlignment="Stretch"
                         Background="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=(wpf:ButtonProgressAssist.IndicatorBackground)}"
                         Foreground="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=(wpf:ButtonProgressAssist.IndicatorForeground)}"
                         IsIndeterminate="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=(wpf:ButtonProgressAssist.IsIndeterminate)}"
                         Maximum="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=(wpf:ButtonProgressAssist.Maximum)}"
                         Minimum="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=(wpf:ButtonProgressAssist.Minimum)}"
                         Opacity="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=(wpf:ButtonProgressAssist.Opacity)}"
                         RenderTransformOrigin=".5, .5"
                         Style="{DynamicResource MaterialDesignCircularProgressBar}"
                         Visibility="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=(wpf:ButtonProgressAssist.IsIndicatorVisible), Converter={x:Static converters:BooleanToVisibilityConverter.CollapsedInstance}}"
                         Value="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=(wpf:ButtonProgressAssist.Value)}">
              <ProgressBar.RenderTransform>
                <TransformGroup>
                  <ScaleTransform ScaleX="0" ScaleY="0" />
                </TransformGroup>
              </ProgressBar.RenderTransform>
            </ProgressBar>
            <Ellipse Fill="{TemplateBinding Background}"
                     Stroke="{TemplateBinding BorderBrush}"
                     StrokeThickness="{TemplateBinding BorderThickness}" />
            <wpf:Ripple Padding="{TemplateBinding Padding}"
                        HorizontalContentAlignment="{TemplateBinding HorizontalContentAlignment}"
                        VerticalContentAlignment="{TemplateBinding VerticalContentAlignment}"
                        Clip="{Binding ElementName=GeometryEllipse, Path=RenderedGeometry}"
                        ClipToBounds="True"
                        Content="{TemplateBinding Content}"
                        ContentStringFormat="{TemplateBinding ContentStringFormat}"
                        ContentTemplate="{TemplateBinding ContentTemplate}"
                        Focusable="False"
                        SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" />
            <Ellipse x:Name="GeometryEllipse"
                     Fill="Transparent"
                     Focusable="False"
                     IsHitTestVisible="False" />
          </Grid>
          <ControlTemplate.Triggers>
            <Trigger Property="Button.IsDefaulted" Value="true">
              <Setter TargetName="border" Property="Stroke" Value="{DynamicResource {x:Static SystemColors.HighlightBrushKey}}" />
            </Trigger>
            <Trigger Property="IsEnabled" Value="false">
              <Setter Property="Opacity" Value="0.38" />
            </Trigger>
            <Trigger Property="IsMouseOver" Value="True">
              <Setter TargetName="border" Property="wpf:ShadowAssist.Darken" Value="True" />
            </Trigger>
            <Trigger Property="IsKeyboardFocused" Value="true">
              <Setter TargetName="border" Property="wpf:ShadowAssist.Darken" Value="True" />
            </Trigger>
            <Trigger Property="wpf:ButtonProgressAssist.IsIndicatorVisible" Value="True">
              <Trigger.EnterActions>
                <BeginStoryboard>
                  <Storyboard>
                    <DoubleAnimation Storyboard.TargetName="ProgressBar"
                                     Storyboard.TargetProperty="(UIElement.RenderTransform).(TransformGroup.Children)[0].(ScaleTransform.ScaleX)"
                                     From=".9"
                                     To="1"
                                     Duration="0:0:0.2" />
                    <DoubleAnimation Storyboard.TargetName="ProgressBar"
                                     Storyboard.TargetProperty="(UIElement.RenderTransform).(TransformGroup.Children)[0].(ScaleTransform.ScaleY)"
                                     From=".9"
                                     To="1"
                                     Duration="0:0:0.2" />
                  </Storyboard>
                </BeginStoryboard>
              </Trigger.EnterActions>
              <Trigger.ExitActions>
                <BeginStoryboard>
                  <Storyboard>
                    <DoubleAnimation Storyboard.TargetName="ProgressBar"
                                     Storyboard.TargetProperty="(UIElement.RenderTransform).(TransformGroup.Children)[0].(ScaleTransform.ScaleX)"
                                     From="1"
                                     To=".9"
                                     Duration="0:0:0.2" />
                    <DoubleAnimation Storyboard.TargetName="ProgressBar"
                                     Storyboard.TargetProperty="(UIElement.RenderTransform).(TransformGroup.Children)[0].(ScaleTransform.ScaleY)"
                                     From="1"
                                     To=".9"
                                     Duration="0:0:0.2" />
                  </Storyboard>
                </BeginStoryboard>
              </Trigger.ExitActions>
            </Trigger>
          </ControlTemplate.Triggers>
        </ControlTemplate>
      </Setter.Value>
    </Setter>
    <Setter Property="VerticalContentAlignment" Value="Center" />
    <Setter Property="Width" Value="40" />
    <Setter Property="wpf:ButtonProgressAssist.IndicatorBackground" Value="{DynamicResource MaterialDesign.Brush.TextBox.HoverBackground}" />
    <Setter Property="wpf:ButtonProgressAssist.IndicatorForeground" Value="{DynamicResource MaterialDesign.Brush.Secondary}" />
    <Setter Property="wpf:ButtonProgressAssist.Opacity" Value="1" />
    <Setter Property="wpf:ElevationAssist.Elevation" Value="Dp6" />
    <Setter Property="wpf:RippleAssist.Feedback" Value="White" />
  </Style>
 
  <Style x:Key="MaterialDesignFloatingActionButton"
         TargetType="{x:Type ButtonBase}"
         BasedOn="{StaticResource MaterialDesignFloatingActionMiniButton}">
    <Setter Property="Height" Value="56" />
    <Setter Property="Width" Value="56" />
  </Style>
 
  <Style x:Key="MaterialDesignFloatingActionMiniLightButton"
         TargetType="{x:Type ButtonBase}"
         BasedOn="{StaticResource MaterialDesignFloatingActionMiniButton}">
    <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}" />
    <Setter Property="wpf:ButtonProgressAssist.IndicatorForeground" Value="{DynamicResource MaterialDesign.Brush.Primary.Dark}" />
  </Style>
 
  <Style x:Key="MaterialDesignFloatingActionMiniDarkButton"
         TargetType="{x:Type ButtonBase}"
         BasedOn="{StaticResource MaterialDesignFloatingActionMiniButton}">
    <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}" />
    <Setter Property="wpf:ButtonProgressAssist.IndicatorForeground" Value="{DynamicResource MaterialDesign.Brush.Primary.Light}" />
  </Style>
 
  <Style x:Key="MaterialDesignFloatingActionMiniSecondaryButton"
         TargetType="{x:Type ButtonBase}"
         BasedOn="{StaticResource MaterialDesignFloatingActionMiniButton}">
    <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}" />
    <Setter Property="wpf:ButtonProgressAssist.IndicatorForeground" Value="{DynamicResource MaterialDesign.Brush.Secondary}" />
  </Style>
 
  <Style x:Key="MaterialDesignFloatingActionMiniSecondaryLightButton"
         TargetType="{x:Type ButtonBase}"
         BasedOn="{StaticResource MaterialDesignFloatingActionMiniButton}">
    <Setter Property="Background" Value="{DynamicResource MaterialDesign.Brush.Secondary.Light}" />
    <Setter Property="BorderBrush" Value="{DynamicResource MaterialDesign.Brush.Secondary.Light}" />
    <Setter Property="Foreground" Value="{DynamicResource MaterialDesign.Brush.Secondary.Light.Foreground}" />
    <Setter Property="wpf:ButtonProgressAssist.IndicatorForeground" Value="{DynamicResource MaterialDesign.Brush.Secondary.Dark}" />
  </Style>
 
  <Style x:Key="MaterialDesignFloatingActionMiniSecondaryDarkButton"
         TargetType="{x:Type ButtonBase}"
         BasedOn="{StaticResource MaterialDesignFloatingActionMiniButton}">
    <Setter Property="Background" Value="{DynamicResource MaterialDesign.Brush.Secondary.Dark}" />
    <Setter Property="BorderBrush" Value="{DynamicResource MaterialDesign.Brush.Secondary.Dark}" />
    <Setter Property="Foreground" Value="{DynamicResource MaterialDesign.Brush.Secondary.Dark.Foreground}" />
    <Setter Property="wpf:ButtonProgressAssist.IndicatorForeground" Value="{DynamicResource MaterialDesign.Brush.Secondary.Light}" />
  </Style>
 
  <Style x:Key="MaterialDesignFloatingActionLightButton"
         TargetType="{x:Type ButtonBase}"
         BasedOn="{StaticResource MaterialDesignFloatingActionButton}">
    <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}" />
    <Setter Property="wpf:ButtonProgressAssist.IndicatorForeground" Value="{DynamicResource MaterialDesign.Brush.Primary.Dark}" />
  </Style>
 
  <Style x:Key="MaterialDesignFloatingActionDarkButton"
         TargetType="{x:Type ButtonBase}"
         BasedOn="{StaticResource MaterialDesignFloatingActionButton}">
    <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}" />
    <Setter Property="wpf:ButtonProgressAssist.IndicatorForeground" Value="{DynamicResource MaterialDesign.Brush.Primary.Light}" />
  </Style>
 
  <Style x:Key="MaterialDesignFloatingActionSecondaryButton"
         TargetType="{x:Type ButtonBase}"
         BasedOn="{StaticResource MaterialDesignFloatingActionButton}">
    <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}" />
    <Setter Property="wpf:ButtonProgressAssist.IndicatorForeground" Value="{DynamicResource MaterialDesign.Brush.Primary}" />
  </Style>
 
  <Style x:Key="MaterialDesignFloatingActionSecondaryLightButton"
         TargetType="{x:Type ButtonBase}"
         BasedOn="{StaticResource MaterialDesignFloatingActionButton}">
    <Setter Property="Background" Value="{DynamicResource MaterialDesign.Brush.Secondary.Light}" />
    <Setter Property="BorderBrush" Value="{DynamicResource MaterialDesign.Brush.Secondary.Light}" />
    <Setter Property="Foreground" Value="{DynamicResource MaterialDesign.Brush.Secondary.Light.Foreground}" />
    <Setter Property="wpf:ButtonProgressAssist.IndicatorForeground" Value="{DynamicResource MaterialDesign.Brush.Secondary.Dark}" />
  </Style>
 
  <Style x:Key="MaterialDesignFloatingActionSecondaryDarkButton"
         TargetType="{x:Type ButtonBase}"
         BasedOn="{StaticResource MaterialDesignFloatingActionButton}">
    <Setter Property="Background" Value="{DynamicResource MaterialDesign.Brush.Secondary.Dark}" />
    <Setter Property="BorderBrush" Value="{DynamicResource MaterialDesign.Brush.Secondary.Dark}" />
    <Setter Property="Foreground" Value="{DynamicResource MaterialDesign.Brush.Secondary.Dark.Foreground}" />
    <Setter Property="wpf:ButtonProgressAssist.IndicatorForeground" Value="{DynamicResource MaterialDesign.Brush.Secondary.Light}" />
  </Style>
 
  <!--#endregion-->
  <!--#region Icon Button-->
 
  <Style x:Key="MaterialDesignIconButton"
         TargetType="{x:Type ButtonBase}"
         BasedOn="{StaticResource MaterialDesignFlatButton}">
    <Setter Property="Height" Value="48" />
    <Setter Property="Padding" Value="0" />
    <Setter Property="Template">
      <Setter.Value>
        <ControlTemplate TargetType="{x:Type ButtonBase}">
          <ControlTemplate.Resources>
            <Style TargetType="wpf:PackIcon">
              <Setter Property="Height" Value="24" />
              <Setter Property="Width" Value="24" />
            </Style>
          </ControlTemplate.Resources>
          <Grid>
            <Ellipse x:Name="border"
                     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>
            <Ellipse x:Name="overlay"
                     Fill="{TemplateBinding Foreground}"
                     Opacity=".16"
                     Visibility="Hidden" />
            <wpf:Ripple Padding="{TemplateBinding Padding}"
                        HorizontalContentAlignment="{TemplateBinding HorizontalContentAlignment}"
                        VerticalContentAlignment="{TemplateBinding VerticalContentAlignment}"
                        Clip="{Binding ElementName=GeometryEllipse, Path=RenderedGeometry}"
                        ClipToBounds="True"
                        Content="{TemplateBinding Content}"
                        ContentStringFormat="{TemplateBinding ContentStringFormat}"
                        ContentTemplate="{TemplateBinding ContentTemplate}"
                        Focusable="False"
                        SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" />
            <Ellipse x:Name="GeometryEllipse"
                     Fill="Transparent"
                     Focusable="False"
                     IsHitTestVisible="False" />
          </Grid>
          <ControlTemplate.Triggers>
            <Trigger Property="IsMouseOver" Value="true">
              <Setter TargetName="overlay" Property="Visibility" Value="Visible" />
            </Trigger>
            <Trigger Property="IsEnabled" Value="false">
              <Setter Property="Opacity" Value="0.38" />
            </Trigger>
          </ControlTemplate.Triggers>
        </ControlTemplate>
      </Setter.Value>
    </Setter>
    <Setter Property="Width" Value="48" />
  </Style>
 
  <Style x:Key="MaterialDesignIconForegroundButton"
         TargetType="{x:Type ButtonBase}"
         BasedOn="{StaticResource MaterialDesignIconButton}">
    <Setter Property="Foreground" Value="{Binding RelativeSource={RelativeSource AncestorType={x:Type FrameworkElement}}, Path=(TextElement.Foreground)}" />
    <Setter Property="wpf:RippleAssist.Feedback" Value="{Binding RelativeSource={RelativeSource AncestorType={x:Type FrameworkElement}}, Path=(TextElement.Foreground)}" />
  </Style>
 
  <!--#endregion-->
  <!--#region Paper Button-->
 
  <Style x:Key="MaterialDesignPaperButton" TargetType="{x:Type ButtonBase}">
    <Setter Property="Background" Value="{DynamicResource MaterialDesign.Brush.Background}" />
    <Setter Property="BorderBrush" Value="{DynamicResource MaterialDesign.Brush.Primary}" />
    <Setter Property="BorderThickness" Value="1" />
    <Setter Property="Cursor" Value="Hand" />
    <Setter Property="FocusVisualStyle" Value="{StaticResource FocusVisual}" />
    <Setter Property="Foreground" Value="{DynamicResource MaterialDesign.Brush.Foreground}" />
    <Setter Property="Height" Value="32" />
    <Setter Property="HorizontalContentAlignment" Value="Center" />
    <Setter Property="Padding" Value="16,4,16,4" />
    <Setter Property="Template">
      <Setter.Value>
        <ControlTemplate TargetType="{x:Type ButtonBase}">
          <Grid>
            <AdornerDecorator CacheMode="{Binding RelativeSource={RelativeSource Self}, Path=(wpf:ShadowAssist.CacheMode)}">
              <Grid>
                <Border x:Name="background"
                        Background="{TemplateBinding Background}"
                        CornerRadius="{Binding Path=(wpf:ButtonAssist.CornerRadius), RelativeSource={RelativeSource TemplatedParent}}"
                        Effect="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=(wpf:ElevationAssist.Elevation), Converter={x:Static converters:ShadowConverter.Instance}}" />
                <Border x:Name="border"
                        BorderBrush="{TemplateBinding BorderBrush}"
                        BorderThickness="{TemplateBinding BorderThickness}"
                        CornerRadius="{Binding Path=(wpf:ButtonAssist.CornerRadius), RelativeSource={RelativeSource TemplatedParent}}" />
              </Grid>
            </AdornerDecorator>
            <wpf:Ripple Padding="{TemplateBinding Padding}"
                        HorizontalContentAlignment="{TemplateBinding HorizontalContentAlignment}"
                        VerticalContentAlignment="{TemplateBinding VerticalContentAlignment}"
                        Content="{TemplateBinding Content}"
                        ContentStringFormat="{TemplateBinding ContentStringFormat}"
                        ContentTemplate="{TemplateBinding ContentTemplate}"
                        Focusable="False"
                        SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}">
              <wpf:Ripple.Clip>
                <MultiBinding Converter="{x:Static converters:BorderClipConverter.Instance}">
                  <Binding ElementName="border" Path="ActualWidth" />
                  <Binding ElementName="border" Path="ActualHeight" />
                  <Binding ElementName="border" Path="CornerRadius" />
                  <Binding ElementName="border" Path="BorderThickness" />
                </MultiBinding>
              </wpf:Ripple.Clip>
            </wpf:Ripple>
          </Grid>
          <ControlTemplate.Triggers>
            <Trigger Property="IsMouseOver" Value="true">
              <Setter TargetName="background" Property="wpf:ShadowAssist.Darken" Value="True" />
              <Setter TargetName="border" Property="Background" Value="{Binding BorderBrush, RelativeSource={RelativeSource Mode=TemplatedParent}, Converter={x:Static converters:BrushOpacityConverter.Instance}, ConverterParameter=0.16}" />
            </Trigger>
            <Trigger Property="IsEnabled" Value="false">
              <Setter Property="Opacity" Value="0.38" />
            </Trigger>
          </ControlTemplate.Triggers>
        </ControlTemplate>
      </Setter.Value>
    </Setter>
    <Setter Property="TextBlock.FontSize" Value="14" />
    <Setter Property="TextBlock.FontWeight" Value="Medium" />
    <Setter Property="VerticalContentAlignment" Value="Center" />
    <Setter Property="wpf:ElevationAssist.Elevation" Value="Dp2" />
    <Setter Property="wpf:RippleAssist.Feedback" Value="{DynamicResource MaterialDesign.Brush.Primary}" />
  </Style>
 
  <Style x:Key="MaterialDesignPaperLightButton"
         TargetType="{x:Type ButtonBase}"
         BasedOn="{StaticResource MaterialDesignPaperButton}">
    <Setter Property="BorderBrush" Value="{DynamicResource MaterialDesign.Brush.Primary.Light}" />
    <Setter Property="wpf:RippleAssist.Feedback" Value="{DynamicResource MaterialDesign.Brush.Primary.Light}" />
  </Style>
 
  <Style x:Key="MaterialDesignPaperDarkButton"
         TargetType="{x:Type ButtonBase}"
         BasedOn="{StaticResource MaterialDesignPaperButton}">
    <Setter Property="BorderBrush" Value="{DynamicResource MaterialDesign.Brush.Primary.Dark}" />
    <Setter Property="wpf:RippleAssist.Feedback" Value="{DynamicResource MaterialDesign.Brush.Primary.Dark}" />
  </Style>
 
  <Style x:Key="MaterialDesignPaperSecondaryLightButton"
         TargetType="{x:Type ButtonBase}"
         BasedOn="{StaticResource MaterialDesignPaperButton}">
    <Setter Property="BorderBrush" Value="{DynamicResource MaterialDesign.Brush.Secondary.Light}" />
    <Setter Property="wpf:RippleAssist.Feedback" Value="{DynamicResource MaterialDesign.Brush.Secondary.Light}" />
  </Style>
  <Style x:Key="MaterialDesignPaperSecondaryButton"
         TargetType="{x:Type ButtonBase}"
         BasedOn="{StaticResource MaterialDesignPaperButton}">
    <Setter Property="BorderBrush" Value="{DynamicResource MaterialDesign.Brush.Secondary}" />
    <Setter Property="wpf:RippleAssist.Feedback" Value="{DynamicResource MaterialDesign.Brush.Secondary}" />
  </Style>
  <Style x:Key="MaterialDesignPaperSecondaryDarkButton"
         TargetType="{x:Type ButtonBase}"
         BasedOn="{StaticResource MaterialDesignPaperButton}">
    <Setter Property="BorderBrush" Value="{DynamicResource MaterialDesign.Brush.Secondary.Dark}" />
    <Setter Property="wpf:RippleAssist.Feedback" Value="{DynamicResource MaterialDesign.Brush.Secondary.Dark}" />
  </Style>
 
  <!--#endregion-->
 
</ResourceDictionary>