Themes/MaterialDesign3.NavigationRail.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.Badged.xaml" />
  </ResourceDictionary.MergedDictionaries>
 
  <Style x:Key="MaterialDesign3.NavigationRailListBoxItem" TargetType="{x:Type ListBoxItem}">
    <Setter Property="Background" Value="{DynamicResource MaterialDesign.Brush.ForegroundLight}" />
    <Setter Property="BorderThickness" Value="0" />
    <Setter Property="FontSize" Value="12" />
    <Setter Property="FontWeight" Value="Regular" />
    <Setter Property="Foreground" Value="{DynamicResource MaterialDesign.Brush.Foreground}" />
    <Setter Property="HorizontalContentAlignment" Value="Stretch" />
    <Setter Property="Margin" Value="0,3" />
    <Setter Property="MinHeight" Value="62" />
    <Setter Property="Padding" Value="0" />
    <Setter Property="SnapsToDevicePixels" Value="True" />
    <Setter Property="Template">
      <Setter.Value>
        <ControlTemplate TargetType="{x:Type ListBoxItem}">
          <Border x:Name="border"
                  Margin="{TemplateBinding Margin}"
                  ClipToBounds="{TemplateBinding ClipToBounds}"
                  CornerRadius="{Binding Path=(wpf:NavigationRailAssist.CornerRadius), RelativeSource={RelativeSource TemplatedParent}}">
            <VisualStateManager.VisualStateGroups>
              <VisualStateGroup Name="CommonStates">
                <VisualStateGroup.Transitions>
                  <VisualTransition GeneratedDuration="0:0:0.3" To="Normal">
                    <VisualTransition.GeneratedEasingFunction>
                      <CircleEase EasingMode="EaseOut" />
                    </VisualTransition.GeneratedEasingFunction>
                  </VisualTransition>
                </VisualStateGroup.Transitions>
                <VisualState Name="Normal" />
                <VisualState Name="MouseOver">
                  <Storyboard>
                    <DoubleAnimation Storyboard.TargetName="MouseOverBorder"
                                     Storyboard.TargetProperty="Opacity"
                                     To="0.1"
                                     Duration="0" />
                  </Storyboard>
                </VisualState>
                <VisualState Name="Disabled" />
              </VisualStateGroup>
              <VisualStateGroup Name="SelectionStates">
                <VisualStateGroup.Transitions>
                  <VisualTransition GeneratedDuration="0:0:0.6" />
                </VisualStateGroup.Transitions>
                <VisualState Name="Selected">
                  <Storyboard>
                    <DoubleAnimation Storyboard.TargetName="SelectedBorder"
                                     Storyboard.TargetProperty="Opacity"
                                     To="1"
                                     Duration="0" />
                  </Storyboard>
                </VisualState>
                <VisualState Name="Unselected" />
                <VisualState Name="SelectedUnfocused">
                  <Storyboard>
                    <DoubleAnimation Storyboard.TargetName="SelectedBorder"
                                     Storyboard.TargetProperty="Opacity"
                                     To="1"
                                     Duration="0" />
                  </Storyboard>
                </VisualState>
              </VisualStateGroup>
            </VisualStateManager.VisualStateGroups>
            <Grid ClipToBounds="False">
              <Grid>
                <Grid.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>
                </Grid.Clip>
                <Border x:Name="MouseOverBorder"
                        Background="{TemplateBinding Foreground, Converter={x:Static converters:BrushRoundConverter.Instance}}"
                        Opacity="0" />
 
                <Border x:Name="SelectedBorder"
                        Width="{Binding Path=(wpf:NavigationRailAssist.SelectionWidth), RelativeSource={RelativeSource TemplatedParent}}"
                        Height="{Binding Path=(wpf:NavigationRailAssist.SelectionHeight), RelativeSource={RelativeSource TemplatedParent}}"
                        VerticalAlignment="Top"
                        Background="{TemplateBinding Background}"
                        BorderBrush="{TemplateBinding BorderBrush}"
                        BorderThickness="{TemplateBinding BorderThickness}"
                        CornerRadius="{Binding Path=(wpf:NavigationRailAssist.SelectionCornerRadius), RelativeSource={RelativeSource TemplatedParent}}"
                        Opacity="0" />
                <wpf:Ripple Padding="{TemplateBinding Padding}"
                            HorizontalContentAlignment="{TemplateBinding HorizontalContentAlignment}"
                            VerticalContentAlignment="{TemplateBinding VerticalContentAlignment}"
                            ClipToBounds="False"
                            ContentTemplate="{TemplateBinding ContentTemplate}"
                            ContentTemplateSelector="{TemplateBinding ContentTemplateSelector}"
                            Feedback="{TemplateBinding Foreground, Converter={x:Static converters:BrushRoundConverter.Instance}}"
                            Focusable="False"
                            RecognizesAccessKey="False"
                            SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" />
              </Grid>
 
 
              <Grid HorizontalAlignment="Stretch" VerticalAlignment="Stretch">
                <Grid.RowDefinitions>
                  <RowDefinition Height="4*" />
                  <RowDefinition Height="3*" />
                </Grid.RowDefinitions>
                <Grid x:Name="IconContainer"
                      Grid.RowSpan="1"
                      Height="{Binding Path=(wpf:NavigationRailAssist.SelectionHeight), RelativeSource={RelativeSource TemplatedParent}}"
                      HorizontalAlignment="Stretch"
                      VerticalAlignment="Stretch">
                  <wpf:Badged x:Name="badge"
                              HorizontalAlignment="Center"
                              VerticalAlignment="Center"
                              Badge="{Binding Path=(wpf:BadgedAssist.Badge), RelativeSource={RelativeSource TemplatedParent}}"
                              BadgeBackground="{Binding Path=(wpf:BadgedAssist.BadgeBackground), RelativeSource={RelativeSource TemplatedParent}}"
                              BadgeForeground="{Binding Path=(wpf:BadgedAssist.BadgeForeground), RelativeSource={RelativeSource TemplatedParent}}"
                              BadgePlacementMode="{Binding Path=(wpf:BadgedAssist.BadgePlacementMode), RelativeSource={RelativeSource TemplatedParent}}"
                              Style="{StaticResource MaterialDesignBadge}">
 
                    <wpf:PackIcon x:Name="Icon"
                                  Width="{Binding Path=(wpf:NavigationRailAssist.IconSize), RelativeSource={RelativeSource TemplatedParent}}"
                                  Height="{Binding Path=(wpf:NavigationRailAssist.IconSize), RelativeSource={RelativeSource TemplatedParent}}"
                                  HorizontalAlignment="Center"
                                  VerticalAlignment="Center"
                                  Kind="{Binding Path=(wpf:NavigationRailAssist.SelectedIcon), RelativeSource={RelativeSource TemplatedParent}}" />
                  </wpf:Badged>
                </Grid>
                <ContentControl x:Name="Text"
                                Grid.Row="1"
                                Margin="4,4,4,0"
                                Padding="0"
                                HorizontalAlignment="Center"
                                VerticalAlignment="Center"
                                Content="{TemplateBinding Content}" />
              </Grid>
 
            </Grid>
          </Border>
          <ControlTemplate.Triggers>
            <Trigger Property="IsEnabled" Value="False">
              <Setter Property="Opacity" Value=".56" />
            </Trigger>
            <Trigger Property="IsSelected" Value="False">
              <Setter TargetName="Icon" Property="Kind" Value="{Binding Path=(wpf:NavigationRailAssist.UnselectedIcon), RelativeSource={RelativeSource TemplatedParent}}" />
            </Trigger>
            <Trigger Property="wpf:NavigationRailAssist.IsTextVisible" Value="False">
              <Setter TargetName="IconContainer" Property="Grid.RowSpan" Value="2" />
              <Setter TargetName="SelectedBorder" Property="CornerRadius" Value="{Binding Path=(wpf:NavigationRailAssist.SelectionHeight), RelativeSource={RelativeSource TemplatedParent}}" />
              <Setter TargetName="SelectedBorder" Property="Height" Value="{Binding Path=(wpf:NavigationRailAssist.SelectionWidth), RelativeSource={RelativeSource TemplatedParent}}" />
              <Setter TargetName="Text" Property="Visibility" Value="Collapsed" />
            </Trigger>
            <Trigger Property="wpf:BadgedAssist.IsMiniBadge" Value="True">
              <Setter TargetName="badge" Property="Style" Value="{StaticResource MaterialDesignMiniBadge}" />
            </Trigger>
          </ControlTemplate.Triggers>
        </ControlTemplate>
      </Setter.Value>
    </Setter>
    <Setter Property="VerticalContentAlignment" Value="Stretch" />
    <Setter Property="Width" Value="80" />
    <Setter Property="wpf:BadgedAssist.BadgeBackground" Value="{DynamicResource MaterialDesign.Brush.Primary.Light}" />
    <Setter Property="wpf:BadgedAssist.BadgeForeground" Value="{DynamicResource MaterialDesign.Brush.Primary.Light.Foreground}" />
    <Setter Property="wpf:BadgedAssist.BadgePlacementMode" Value="TopRight" />
    <Setter Property="wpf:NavigationRailAssist.CornerRadius" Value="0" />
    <Setter Property="wpf:NavigationRailAssist.IconSize" Value="24" />
    <Setter Property="wpf:NavigationRailAssist.IsTextVisible" Value="True" />
    <Setter Property="wpf:NavigationRailAssist.SelectedIcon" Value="Circle" />
    <Setter Property="wpf:NavigationRailAssist.SelectionCornerRadius" Value="16" />
    <Setter Property="wpf:NavigationRailAssist.SelectionHeight" Value="32" />
    <Setter Property="wpf:NavigationRailAssist.SelectionWidth" Value="56" />
    <Setter Property="wpf:NavigationRailAssist.UnselectedIcon" Value="CircleOutline" />
    <Setter Property="wpf:ThemeAssist.TriggerBrush" Value="{DynamicResource MaterialDesign.Brush.Background}" />
  </Style>
 
  <Style x:Key="MaterialDesign3.NavigationRailPrimaryListBoxItem"
         TargetType="{x:Type ListBoxItem}"
         BasedOn="{StaticResource MaterialDesign3.NavigationRailListBoxItem}">
    <Setter Property="Background" Value="{DynamicResource MaterialDesign.Brush.Primary}" />
  </Style>
 
</ResourceDictionary>