Themes/MaterialDesignTheme.Badged.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">
 
  <SineEase x:Key="BadgeEase" EasingMode="EaseOut" />
  <Storyboard x:Key="BadgeChangedStoryboard">
    <DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.RenderTransform).(ScaleTransform.ScaleX)">
      <EasingDoubleKeyFrame KeyTime="0" Value="1.4" />
      <EasingDoubleKeyFrame EasingFunction="{StaticResource BadgeEase}"
                            KeyTime="0:0:0.3"
                            Value="1" />
    </DoubleAnimationUsingKeyFrames>
    <DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.RenderTransform).(ScaleTransform.ScaleY)">
      <EasingDoubleKeyFrame KeyTime="0" Value="1.4" />
      <EasingDoubleKeyFrame EasingFunction="{StaticResource BadgeEase}"
                            KeyTime="0:0:0.3"
                            Value="1" />
    </DoubleAnimationUsingKeyFrames>
  </Storyboard>
 
  <Style x:Key="MaterialDesignBadge" TargetType="{x:Type wpf:Badged}">
    <Setter Property="BadgeChangedStoryboard" Value="{StaticResource BadgeChangedStoryboard}" />
    <Setter Property="BadgeColorZoneMode" Value="PrimaryLight" />
    <Setter Property="BadgePlacementMode" Value="TopRight" />
    <Setter Property="HorizontalAlignment" Value="Left" />
    <Setter Property="IsTabStop" Value="False" />
    <Setter Property="Template">
      <Setter.Value>
        <ControlTemplate TargetType="{x:Type wpf:Badged}">
          <Grid>
            <Border Background="{TemplateBinding Background}"
                    BorderBrush="{TemplateBinding BorderBrush}"
                    BorderThickness="{TemplateBinding BorderThickness}">
              <ContentPresenter Margin="{TemplateBinding Padding}"
                                HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}"
                                VerticalAlignment="{TemplateBinding VerticalContentAlignment}"
                                Content="{TemplateBinding Content}"
                                ContentStringFormat="{TemplateBinding ContentStringFormat}"
                                ContentTemplate="{TemplateBinding ContentTemplate}"
                                ContentTemplateSelector="{TemplateBinding ContentTemplateSelector}"
                                SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" />
            </Border>
            <Border x:Name="PART_BadgeContainer"
                    MinWidth="18"
                    MinHeight="18"
                    Padding="2"
                    HorizontalAlignment="Left"
                    VerticalAlignment="Top"
                    Background="{TemplateBinding BadgeBackground}"
                    CornerRadius="{TemplateBinding CornerRadius}"
                    RenderTransformOrigin=".5,.5"
                    TextElement.FontSize="11"
                    TextElement.FontWeight="DemiBold"
                    Visibility="{TemplateBinding IsBadgeSet, Converter={x:Static converters:BooleanToVisibilityConverter.CollapsedInstance}}">
              <Border.Resources>
                <Style TargetType="wpf:PackIcon">
                  <Setter Property="Height" Value="12" />
                  <Setter Property="Width" Value="12" />
                </Style>
              </Border.Resources>
              <Border.RenderTransform>
                <ScaleTransform ScaleX="1" ScaleY="1" />
              </Border.RenderTransform>
              <ContentControl Margin="1,0,1,0"
                              HorizontalAlignment="Center"
                              VerticalAlignment="Center"
                              Content="{TemplateBinding Badge}"
                              Focusable="False"
                              Foreground="{TemplateBinding BadgeForeground}"
                              IsTabStop="False" />
            </Border>
          </Grid>
          <ControlTemplate.Triggers>
            <Trigger Property="BadgePlacementMode" Value="TopLeft">
              <Setter TargetName="PART_BadgeContainer" Property="HorizontalAlignment" Value="Left" />
              <Setter TargetName="PART_BadgeContainer" Property="VerticalAlignment" Value="Top" />
            </Trigger>
            <Trigger Property="BadgePlacementMode" Value="Top">
              <Setter TargetName="PART_BadgeContainer" Property="HorizontalAlignment" Value="Center" />
              <Setter TargetName="PART_BadgeContainer" Property="VerticalAlignment" Value="Top" />
            </Trigger>
            <Trigger Property="BadgePlacementMode" Value="TopRight">
              <Setter TargetName="PART_BadgeContainer" Property="HorizontalAlignment" Value="Right" />
              <Setter TargetName="PART_BadgeContainer" Property="VerticalAlignment" Value="Top" />
            </Trigger>
            <Trigger Property="BadgePlacementMode" Value="Right">
              <Setter TargetName="PART_BadgeContainer" Property="HorizontalAlignment" Value="Right" />
              <Setter TargetName="PART_BadgeContainer" Property="VerticalAlignment" Value="Center" />
            </Trigger>
            <Trigger Property="BadgePlacementMode" Value="BottomRight">
              <Setter TargetName="PART_BadgeContainer" Property="HorizontalAlignment" Value="Right" />
              <Setter TargetName="PART_BadgeContainer" Property="VerticalAlignment" Value="Bottom" />
            </Trigger>
            <Trigger Property="BadgePlacementMode" Value="Bottom">
              <Setter TargetName="PART_BadgeContainer" Property="HorizontalAlignment" Value="Center" />
              <Setter TargetName="PART_BadgeContainer" Property="VerticalAlignment" Value="Bottom" />
            </Trigger>
            <Trigger Property="BadgePlacementMode" Value="BottomLeft">
              <Setter TargetName="PART_BadgeContainer" Property="HorizontalAlignment" Value="Left" />
              <Setter TargetName="PART_BadgeContainer" Property="VerticalAlignment" Value="Bottom" />
            </Trigger>
            <Trigger Property="BadgePlacementMode" Value="Left">
              <Setter TargetName="PART_BadgeContainer" Property="HorizontalAlignment" Value="Left" />
              <Setter TargetName="PART_BadgeContainer" Property="VerticalAlignment" Value="Center" />
            </Trigger>
          </ControlTemplate.Triggers>
        </ControlTemplate>
      </Setter.Value>
    </Setter>
    <Setter Property="VerticalAlignment" Value="Top" />
    <Style.Triggers>
      <Trigger Property="BadgeColorZoneMode" Value="Standard">
        <Setter Property="BadgeBackground" Value="{DynamicResource MaterialDesign.Brush.Background}" />
        <Setter Property="BadgeForeground" Value="{DynamicResource MaterialDesign.Brush.Foreground}" />
      </Trigger>
      <Trigger Property="BadgeColorZoneMode" Value="Inverted">
        <Setter Property="BadgeBackground" Value="{DynamicResource MaterialDesign.Brush.Foreground}" />
        <Setter Property="BadgeForeground" Value="{DynamicResource MaterialDesign.Brush.Background}" />
      </Trigger>
      <Trigger Property="BadgeColorZoneMode" Value="PrimaryLight">
        <Setter Property="BadgeBackground" Value="{DynamicResource MaterialDesign.Brush.Primary.Light}" />
        <Setter Property="BadgeForeground" Value="{DynamicResource MaterialDesign.Brush.Primary.Light.Foreground}" />
      </Trigger>
      <Trigger Property="BadgeColorZoneMode" Value="PrimaryMid">
        <Setter Property="BadgeBackground" Value="{DynamicResource MaterialDesign.Brush.Primary}" />
        <Setter Property="BadgeForeground" Value="{DynamicResource MaterialDesign.Brush.Primary.Foreground}" />
      </Trigger>
      <Trigger Property="BadgeColorZoneMode" Value="PrimaryDark">
        <Setter Property="BadgeBackground" Value="{DynamicResource MaterialDesign.Brush.Primary.Dark}" />
        <Setter Property="BadgeForeground" Value="{DynamicResource MaterialDesign.Brush.Primary.Dark.Foreground}" />
      </Trigger>
      <Trigger Property="BadgeColorZoneMode" Value="SecondaryMid">
        <Setter Property="BadgeBackground" Value="{DynamicResource MaterialDesign.Brush.Secondary}" />
        <Setter Property="BadgeForeground" Value="{DynamicResource MaterialDesign.Brush.Secondary.Foreground}" />
      </Trigger>
      <Trigger Property="BadgeColorZoneMode" Value="Light">
        <Setter Property="BadgeBackground" Value="{DynamicResource MaterialDesign.Brush.Badged.LightBackground}" />
        <Setter Property="BadgeForeground" Value="{DynamicResource MaterialDesign.Brush.Badged.LightForeground}" />
      </Trigger>
      <Trigger Property="BadgeColorZoneMode" Value="Dark">
        <Setter Property="BadgeBackground" Value="{DynamicResource MaterialDesign.Brush.Badged.DarkBackground}" />
        <Setter Property="BadgeForeground" Value="{DynamicResource MaterialDesign.Brush.Badged.DarkForeground}" />
      </Trigger>
    </Style.Triggers>
  </Style>
 
  <Style x:Key="MaterialDesignMiniBadge" TargetType="{x:Type wpf:Badged}">
    <Setter Property="BadgeChangedStoryboard" Value="{StaticResource BadgeChangedStoryboard}" />
    <Setter Property="BadgeColorZoneMode" Value="PrimaryLight" />
    <Setter Property="BadgePlacementMode" Value="TopRight" />
    <Setter Property="HorizontalAlignment" Value="Left" />
    <Setter Property="IsTabStop" Value="False" />
    <Setter Property="Template">
      <Setter.Value>
        <ControlTemplate TargetType="{x:Type wpf:Badged}">
          <Grid>
            <Border Background="{TemplateBinding Background}"
                    BorderBrush="{TemplateBinding BorderBrush}"
                    BorderThickness="{TemplateBinding BorderThickness}">
              <ContentPresenter Margin="{TemplateBinding Padding}"
                                HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}"
                                VerticalAlignment="{TemplateBinding VerticalContentAlignment}"
                                Content="{TemplateBinding Content}"
                                ContentStringFormat="{TemplateBinding ContentStringFormat}"
                                ContentTemplate="{TemplateBinding ContentTemplate}"
                                ContentTemplateSelector="{TemplateBinding ContentTemplateSelector}"
                                SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" />
            </Border>
            <Border x:Name="PART_BadgeContainer"
                    Width="6"
                    Height="6"
                    Padding="2"
                    HorizontalAlignment="Left"
                    VerticalAlignment="Top"
                    Background="{TemplateBinding BadgeBackground}"
                    CornerRadius="{TemplateBinding CornerRadius}"
                    RenderTransformOrigin=".5,.5"
                    TextElement.FontSize="11"
                    TextElement.FontWeight="DemiBold"
                    Visibility="{TemplateBinding IsBadgeSet, Converter={x:Static converters:BooleanToVisibilityConverter.CollapsedInstance}}">
              <Border.RenderTransform>
                <ScaleTransform ScaleX="1" ScaleY="1" />
              </Border.RenderTransform>
            </Border>
          </Grid>
          <ControlTemplate.Triggers>
            <Trigger Property="BadgePlacementMode" Value="TopLeft">
              <Setter TargetName="PART_BadgeContainer" Property="HorizontalAlignment" Value="Left" />
              <Setter TargetName="PART_BadgeContainer" Property="VerticalAlignment" Value="Top" />
            </Trigger>
            <Trigger Property="BadgePlacementMode" Value="Top">
              <Setter TargetName="PART_BadgeContainer" Property="HorizontalAlignment" Value="Center" />
              <Setter TargetName="PART_BadgeContainer" Property="VerticalAlignment" Value="Top" />
            </Trigger>
            <Trigger Property="BadgePlacementMode" Value="TopRight">
              <Setter TargetName="PART_BadgeContainer" Property="HorizontalAlignment" Value="Right" />
              <Setter TargetName="PART_BadgeContainer" Property="VerticalAlignment" Value="Top" />
            </Trigger>
            <Trigger Property="BadgePlacementMode" Value="Right">
              <Setter TargetName="PART_BadgeContainer" Property="HorizontalAlignment" Value="Right" />
              <Setter TargetName="PART_BadgeContainer" Property="VerticalAlignment" Value="Center" />
            </Trigger>
            <Trigger Property="BadgePlacementMode" Value="BottomRight">
              <Setter TargetName="PART_BadgeContainer" Property="HorizontalAlignment" Value="Right" />
              <Setter TargetName="PART_BadgeContainer" Property="VerticalAlignment" Value="Bottom" />
            </Trigger>
            <Trigger Property="BadgePlacementMode" Value="Bottom">
              <Setter TargetName="PART_BadgeContainer" Property="HorizontalAlignment" Value="Center" />
              <Setter TargetName="PART_BadgeContainer" Property="VerticalAlignment" Value="Bottom" />
            </Trigger>
            <Trigger Property="BadgePlacementMode" Value="BottomLeft">
              <Setter TargetName="PART_BadgeContainer" Property="HorizontalAlignment" Value="Left" />
              <Setter TargetName="PART_BadgeContainer" Property="VerticalAlignment" Value="Bottom" />
            </Trigger>
            <Trigger Property="BadgePlacementMode" Value="Left">
              <Setter TargetName="PART_BadgeContainer" Property="HorizontalAlignment" Value="Left" />
              <Setter TargetName="PART_BadgeContainer" Property="VerticalAlignment" Value="Center" />
            </Trigger>
          </ControlTemplate.Triggers>
        </ControlTemplate>
      </Setter.Value>
    </Setter>
    <Setter Property="VerticalAlignment" Value="Top" />
    <Style.Triggers>
      <Trigger Property="BadgeColorZoneMode" Value="Standard">
        <Setter Property="BadgeBackground" Value="{DynamicResource MaterialDesign.Brush.Background}" />
        <Setter Property="BadgeForeground" Value="{DynamicResource MaterialDesign.Brush.Foreground}" />
      </Trigger>
      <Trigger Property="BadgeColorZoneMode" Value="Inverted">
        <Setter Property="BadgeBackground" Value="{DynamicResource MaterialDesign.Brush.Foreground}" />
        <Setter Property="BadgeForeground" Value="{DynamicResource MaterialDesign.Brush.Background}" />
      </Trigger>
      <Trigger Property="BadgeColorZoneMode" Value="PrimaryLight">
        <Setter Property="BadgeBackground" Value="{DynamicResource MaterialDesign.Brush.Primary.Light}" />
        <Setter Property="BadgeForeground" Value="{DynamicResource MaterialDesign.Brush.Primary.Light.Foreground}" />
      </Trigger>
      <Trigger Property="BadgeColorZoneMode" Value="PrimaryMid">
        <Setter Property="BadgeBackground" Value="{DynamicResource MaterialDesign.Brush.Primary}" />
        <Setter Property="BadgeForeground" Value="{DynamicResource MaterialDesign.Brush.Primary.Foreground}" />
      </Trigger>
      <Trigger Property="BadgeColorZoneMode" Value="PrimaryDark">
        <Setter Property="BadgeBackground" Value="{DynamicResource MaterialDesign.Brush.Primary.Dark}" />
        <Setter Property="BadgeForeground" Value="{DynamicResource MaterialDesign.Brush.Primary.Dark.Foreground}" />
      </Trigger>
      <Trigger Property="BadgeColorZoneMode" Value="SecondaryMid">
        <Setter Property="BadgeBackground" Value="{DynamicResource MaterialDesign.Brush.Secondary}" />
        <Setter Property="BadgeForeground" Value="{DynamicResource MaterialDesign.Brush.Secondary.Foreground}" />
      </Trigger>
      <Trigger Property="BadgeColorZoneMode" Value="Light">
        <Setter Property="BadgeBackground" Value="{DynamicResource MaterialDesign.Brush.Badged.LightBackground}" />
        <Setter Property="BadgeForeground" Value="{DynamicResource MaterialDesign.Brush.Badged.LightForeground}" />
      </Trigger>
      <Trigger Property="BadgeColorZoneMode" Value="Dark">
        <Setter Property="BadgeBackground" Value="{DynamicResource MaterialDesign.Brush.Badged.DarkBackground}" />
        <Setter Property="BadgeForeground" Value="{DynamicResource MaterialDesign.Brush.Badged.DarkForeground}" />
      </Trigger>
    </Style.Triggers>
  </Style>
 
</ResourceDictionary>