Themes/MaterialDesignTheme.ScrollBar.xaml

<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
                    xmlns:wpf="clr-namespace:MaterialDesignThemes.Wpf">
 
  <Style x:Key="MaterialDesignScrollBarButton" TargetType="{x:Type RepeatButton}">
    <Setter Property="Background" Value="{DynamicResource MaterialDesign.Brush.ScrollBar.RepeatButtonBackground}" />
    <Setter Property="BorderBrush" Value="{DynamicResource MaterialDesign.Brush.ScrollBar.RepeatButtonBackground}" />
    <Setter Property="BorderThickness" Value="1" />
    <Setter Property="FocusVisualStyle" Value="{StaticResource FocusVisual}" />
    <Setter Property="Focusable" Value="false" />
    <Setter Property="HorizontalContentAlignment" Value="Center" />
    <Setter Property="IsTabStop" Value="false" />
    <Setter Property="Padding" Value="1" />
    <Setter Property="Template">
      <Setter.Value>
        <ControlTemplate TargetType="{x:Type RepeatButton}">
          <Border x:Name="border"
                  Background="{TemplateBinding Background}"
                  BorderBrush="{TemplateBinding BorderBrush}"
                  BorderThickness="1"
                  SnapsToDevicePixels="true">
            <ContentPresenter x:Name="contentPresenter"
                              Margin="{TemplateBinding Padding}"
                              HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}"
                              VerticalAlignment="{TemplateBinding VerticalContentAlignment}"
                              Focusable="False"
                              SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" />
          </Border>
          <ControlTemplate.Triggers>
            <Trigger Property="IsMouseOver" Value="true">
              <Setter Property="Background" Value="{DynamicResource MaterialDesign.Brush.ScrollBar.ActiveBackground}" />
              <Setter Property="BorderBrush" Value="{DynamicResource MaterialDesign.Brush.ScrollBar.ActiveBackground}" />
            </Trigger>
            <Trigger Property="IsPressed" Value="true">
              <Setter Property="Background" Value="{DynamicResource MaterialDesign.Brush.ScrollBar.ActiveBackground}" />
              <Setter Property="BorderBrush" Value="{DynamicResource MaterialDesign.Brush.ScrollBar.ActiveBackground}" />
            </Trigger>
            <Trigger Property="IsEnabled" Value="false">
              <Setter TargetName="contentPresenter" Property="Opacity" Value="0.56" />
            </Trigger>
          </ControlTemplate.Triggers>
        </ControlTemplate>
      </Setter.Value>
    </Setter>
    <Setter Property="VerticalContentAlignment" Value="Center" />
    <Setter Property="Visibility" Value="{Binding Path=(wpf:ScrollBarAssist.ButtonsVisibility), RelativeSource={RelativeSource FindAncestor, AncestorType=ScrollBar}}" />
  </Style>
 
  <Style x:Key="MaterialDesignRepeatButtonTransparent" TargetType="{x:Type RepeatButton}">
    <Setter Property="Background" Value="Transparent" />
    <Setter Property="Focusable" Value="false" />
    <Setter Property="IsTabStop" Value="false" />
    <Setter Property="OverridesDefaultStyle" Value="true" />
    <Setter Property="Template">
      <Setter.Value>
        <ControlTemplate TargetType="{x:Type RepeatButton}">
          <Rectangle Width="{TemplateBinding Width}"
                     Height="{TemplateBinding Height}"
                     Fill="{TemplateBinding Background}" />
        </ControlTemplate>
      </Setter.Value>
    </Setter>
  </Style>
 
  <Style x:Key="MaterialDesignScrollBarThumb" TargetType="{x:Type Thumb}">
    <Setter Property="IsTabStop" Value="false" />
    <Setter Property="OverridesDefaultStyle" Value="true" />
    <Setter Property="Template">
      <Setter.Value>
        <ControlTemplate TargetType="{x:Type Thumb}">
          <Border Background="Transparent">
            <Border x:Name="border"
                    Width="{TemplateBinding Width}"
                    Height="{TemplateBinding Height}"
                    Background="{DynamicResource MaterialDesign.Brush.Foreground}"
                    BorderThickness="0"
                    CornerRadius="{Binding Path=(wpf:ScrollBarAssist.ThumbCornerRadius), RelativeSource={RelativeSource FindAncestor, AncestorType=ScrollBar}}"
                    Opacity="0.5"
                    SnapsToDevicePixels="True" />
          </Border>
          <ControlTemplate.Triggers>
            <Trigger Property="IsDragging" Value="true">
              <Setter TargetName="border" Property="Opacity" Value="0.8" />
            </Trigger>
            <DataTrigger Binding="{Binding Orientation, RelativeSource={RelativeSource FindAncestor, AncestorType=ScrollBar}}" Value="Vertical">
              <Setter TargetName="border" Property="Width" Value="{Binding Path=(wpf:ScrollBarAssist.ThumbWidth), RelativeSource={RelativeSource FindAncestor, AncestorType=ScrollBar}}" />
            </DataTrigger>
            <DataTrigger Binding="{Binding Orientation, RelativeSource={RelativeSource FindAncestor, AncestorType=ScrollBar}}" Value="Horizontal">
              <Setter TargetName="border" Property="Height" Value="{Binding Path=(wpf:ScrollBarAssist.ThumbHeight), RelativeSource={RelativeSource FindAncestor, AncestorType=ScrollBar}}" />
            </DataTrigger>
          </ControlTemplate.Triggers>
        </ControlTemplate>
      </Setter.Value>
    </Setter>
  </Style>
 
  <Style x:Key="MaterialDesignScrollBar" TargetType="{x:Type ScrollBar}">
    <Setter Property="Background" Value="Transparent" />
    <Setter Property="BorderBrush" Value="Transparent" />
    <Setter Property="BorderThickness" Value="1,0" />
    <Setter Property="Foreground" Value="{DynamicResource MaterialDesign.Brush.ScrollBar.Foreground}" />
    <Setter Property="MinWidth" Value="{DynamicResource {x:Static SystemParameters.VerticalScrollBarWidthKey}}" />
    <Setter Property="Stylus.IsFlicksEnabled" Value="false" />
    <Setter Property="Stylus.IsPressAndHoldEnabled" Value="false" />
    <Setter Property="Template">
      <Setter.Value>
        <ControlTemplate TargetType="{x:Type ScrollBar}">
          <Grid x:Name="Bg"
                Opacity="0.5"
                SnapsToDevicePixels="true">
            <Grid.RowDefinitions>
              <RowDefinition Height="Auto" MaxHeight="{DynamicResource {x:Static SystemParameters.VerticalScrollBarButtonHeightKey}}" />
              <RowDefinition Height="0.00001*" />
              <RowDefinition Height="Auto" MaxHeight="{DynamicResource {x:Static SystemParameters.VerticalScrollBarButtonHeightKey}}" />
            </Grid.RowDefinitions>
            <VisualStateManager.VisualStateGroups>
              <VisualStateGroup x:Name="CommonStates">
                <VisualState x:Name="Normal" />
                <VisualState x:Name="MouseOver">
                  <Storyboard>
                    <DoubleAnimation Storyboard.TargetName="Bg"
                                     Storyboard.TargetProperty="Opacity"
                                     To="0.8"
                                     Duration="0:0:0.2" />
                  </Storyboard>
                </VisualState>
                <VisualState x:Name="Disabled">
                  <Storyboard>
                    <DoubleAnimation Storyboard.TargetName="Bg"
                                     Storyboard.TargetProperty="Opacity"
                                     To="0.35"
                                     Duration="0:0:0.2" />
                  </Storyboard>
                </VisualState>
              </VisualStateGroup>
            </VisualStateManager.VisualStateGroups>
            <Border Grid.Row="1"
                    Background="{TemplateBinding Background}"
                    BorderBrush="{TemplateBinding BorderBrush}"
                    BorderThickness="{TemplateBinding BorderThickness}" />
            <RepeatButton x:Name="PART_LineUpButton"
                          Grid.Row="0"
                          Command="{x:Static ScrollBar.LineUpCommand}"
                          IsEnabled="{TemplateBinding IsMouseOver}"
                          Style="{StaticResource MaterialDesignScrollBarButton}">
              <Viewbox Width="12"
                       Height="12"
                       Margin="2,3,2,1">
                <Canvas Width="24" Height="24">
                  <Path x:Name="ArrowTop"
                        Data="M13,20H11V8L5.5,13.5L4.08,12.08L12,4.16L19.92,12.08L18.5,13.5L13,8V20Z"
                        Fill="{DynamicResource MaterialDesign.Brush.Foreground}"
                        Stretch="Uniform" />
                </Canvas>
              </Viewbox>
            </RepeatButton>
            <Track x:Name="PART_Track"
                   Grid.Row="1"
                   IsDirectionReversed="true"
                   IsEnabled="{TemplateBinding IsMouseOver}">
              <Track.DecreaseRepeatButton>
                <RepeatButton Command="{x:Static ScrollBar.PageUpCommand}" Style="{StaticResource MaterialDesignRepeatButtonTransparent}" />
              </Track.DecreaseRepeatButton>
              <Track.IncreaseRepeatButton>
                <RepeatButton Command="{x:Static ScrollBar.PageDownCommand}" Style="{StaticResource MaterialDesignRepeatButtonTransparent}" />
              </Track.IncreaseRepeatButton>
              <Track.Thumb>
                <Thumb Style="{StaticResource MaterialDesignScrollBarThumb}" />
              </Track.Thumb>
            </Track>
            <RepeatButton x:Name="PART_LineDownButton"
                          Grid.Row="2"
                          Command="{x:Static ScrollBar.LineDownCommand}"
                          IsEnabled="{TemplateBinding IsMouseOver}"
                          Style="{StaticResource MaterialDesignScrollBarButton}">
              <Viewbox Width="12"
                       Height="12"
                       Margin="2,3,2,1">
                <Canvas Width="24" Height="24">
                  <Path x:Name="ArrowBottom"
                        Data="M11,4H13V16L18.5,10.5L19.92,11.92L12,19.84L4.08,11.92L5.5,10.5L11,16V4Z"
                        Fill="{DynamicResource MaterialDesign.Brush.Foreground}"
                        Stretch="Uniform" />
                </Canvas>
              </Viewbox>
            </RepeatButton>
          </Grid>
        </ControlTemplate>
      </Setter.Value>
    </Setter>
    <Setter Property="Width" Value="{DynamicResource {x:Static SystemParameters.VerticalScrollBarWidthKey}}" />
    <Style.Triggers>
      <Trigger Property="IsEnabled" Value="False">
        <Setter Property="Opacity" Value=".56" />
      </Trigger>
      <Trigger Property="Orientation" Value="Horizontal">
        <Setter Property="BorderThickness" Value="0,1" />
        <Setter Property="Height" Value="{DynamicResource {x:Static SystemParameters.HorizontalScrollBarHeightKey}}" />
        <Setter Property="MinHeight" Value="{DynamicResource {x:Static SystemParameters.HorizontalScrollBarHeightKey}}" />
        <Setter Property="MinWidth" Value="0" />
        <Setter Property="Template">
          <Setter.Value>
            <ControlTemplate TargetType="{x:Type ScrollBar}">
              <Grid x:Name="Bg"
                    Opacity="0.5"
                    SnapsToDevicePixels="true">
                <Grid.ColumnDefinitions>
                  <ColumnDefinition Width="Auto" MaxWidth="{DynamicResource {x:Static SystemParameters.HorizontalScrollBarButtonWidthKey}}" />
                  <ColumnDefinition Width="0.00001*" />
                  <ColumnDefinition Width="Auto" MaxWidth="{DynamicResource {x:Static SystemParameters.HorizontalScrollBarButtonWidthKey}}" />
                </Grid.ColumnDefinitions>
                <VisualStateManager.VisualStateGroups>
                  <VisualStateGroup x:Name="CommonStates">
                    <VisualState x:Name="Normal" />
                    <VisualState x:Name="MouseOver">
                      <Storyboard>
                        <DoubleAnimation Storyboard.TargetName="Bg"
                                         Storyboard.TargetProperty="Opacity"
                                         To="0.8"
                                         Duration="0:0:0.2" />
                      </Storyboard>
                    </VisualState>
                    <VisualState x:Name="Disabled">
                      <Storyboard>
                        <DoubleAnimation Storyboard.TargetName="Bg"
                                         Storyboard.TargetProperty="Opacity"
                                         To="0.35"
                                         Duration="0:0:0.2" />
                      </Storyboard>
                    </VisualState>
                  </VisualStateGroup>
                </VisualStateManager.VisualStateGroups>
                <Border Grid.Column="1"
                        Background="{TemplateBinding Background}"
                        BorderBrush="{TemplateBinding BorderBrush}"
                        BorderThickness="{TemplateBinding BorderThickness}" />
                <RepeatButton x:Name="PART_LineLeftButton"
                              Grid.Column="0"
                              Command="{x:Static ScrollBar.LineLeftCommand}"
                              IsEnabled="{TemplateBinding IsMouseOver}"
                              Style="{StaticResource MaterialDesignScrollBarButton}">
                  <Viewbox Width="12"
                           Height="12"
                           Margin="3,2,1,2">
                    <Canvas Width="24" Height="24">
                      <Path x:Name="ArrowLeft"
                            Data="M20,11V13H8L13.5,18.5L12.08,19.92L4.16,12L12.08,4.08L13.5,5.5L8,11H20Z"
                            Fill="{DynamicResource MaterialDesign.Brush.Foreground}"
                            Stretch="Uniform" />
                    </Canvas>
                  </Viewbox>
                </RepeatButton>
                <Track x:Name="PART_Track"
                       Grid.Column="1"
                       IsEnabled="{TemplateBinding IsMouseOver}">
                  <Track.DecreaseRepeatButton>
                    <RepeatButton Command="{x:Static ScrollBar.PageLeftCommand}" Style="{StaticResource MaterialDesignRepeatButtonTransparent}" />
                  </Track.DecreaseRepeatButton>
                  <Track.IncreaseRepeatButton>
                    <RepeatButton Command="{x:Static ScrollBar.PageRightCommand}" Style="{StaticResource MaterialDesignRepeatButtonTransparent}" />
                  </Track.IncreaseRepeatButton>
                  <Track.Thumb>
                    <Thumb Style="{StaticResource MaterialDesignScrollBarThumb}" />
                  </Track.Thumb>
                </Track>
                <RepeatButton x:Name="PART_LineRightButton"
                              Grid.Column="2"
                              Command="{x:Static ScrollBar.LineRightCommand}"
                              IsEnabled="{TemplateBinding IsMouseOver}"
                              Style="{StaticResource MaterialDesignScrollBarButton}">
                  <Viewbox Width="12"
                           Height="12"
                           Margin="3,2,1,2">
                    <Canvas Width="24" Height="24">
                      <Path x:Name="ArrowRight"
                            Data="M4,11V13H16L10.5,18.5L11.92,19.92L19.84,12L11.92,4.08L10.5,5.5L16,11H4Z"
                            Fill="{DynamicResource MaterialDesign.Brush.Foreground}"
                            Stretch="Uniform" />
                    </Canvas>
                  </Viewbox>
                </RepeatButton>
              </Grid>
              <ControlTemplate.Triggers>
                <MultiDataTrigger>
                  <MultiDataTrigger.Conditions>
                    <Condition Binding="{Binding IsMouseOver, ElementName=PART_LineRightButton}" Value="true" />
                    <Condition Binding="{Binding IsPressed, ElementName=PART_LineRightButton}" Value="true" />
                  </MultiDataTrigger.Conditions>
                  <Setter TargetName="ArrowRight" Property="Fill" Value="{DynamicResource MaterialDesign.Brush.Foreground}" />
                </MultiDataTrigger>
                <MultiDataTrigger>
                  <MultiDataTrigger.Conditions>
                    <Condition Binding="{Binding IsMouseOver, ElementName=PART_LineLeftButton}" Value="true" />
                    <Condition Binding="{Binding IsPressed, ElementName=PART_LineLeftButton}" Value="true" />
                  </MultiDataTrigger.Conditions>
                  <Setter TargetName="ArrowLeft" Property="Fill" Value="{DynamicResource MaterialDesign.Brush.Foreground}" />
                </MultiDataTrigger>
                <MultiDataTrigger>
                  <MultiDataTrigger.Conditions>
                    <Condition Binding="{Binding IsMouseOver, ElementName=PART_LineRightButton}" Value="true" />
                    <Condition Binding="{Binding IsPressed, ElementName=PART_LineRightButton}" Value="false" />
                  </MultiDataTrigger.Conditions>
                  <Setter TargetName="ArrowRight" Property="Fill" Value="{DynamicResource MaterialDesign.Brush.Foreground}" />
                </MultiDataTrigger>
                <MultiDataTrigger>
                  <MultiDataTrigger.Conditions>
                    <Condition Binding="{Binding IsMouseOver, ElementName=PART_LineLeftButton}" Value="true" />
                    <Condition Binding="{Binding IsPressed, ElementName=PART_LineLeftButton}" Value="false" />
                  </MultiDataTrigger.Conditions>
                  <Setter TargetName="ArrowLeft" Property="Fill" Value="{DynamicResource MaterialDesign.Brush.Foreground}" />
                </MultiDataTrigger>
                <Trigger Property="IsEnabled" Value="false">
                  <Setter TargetName="ArrowLeft" Property="Fill" Value="{DynamicResource MaterialDesign.Brush.Foreground}" />
                  <Setter TargetName="ArrowRight" Property="Fill" Value="{DynamicResource MaterialDesign.Brush.Foreground}" />
                </Trigger>
              </ControlTemplate.Triggers>
            </ControlTemplate>
          </Setter.Value>
        </Setter>
        <Setter Property="Width" Value="Auto" />
      </Trigger>
    </Style.Triggers>
  </Style>
 
  <!-- Minimal Style -->
  <Style x:Key="MaterialDesignScrollBarMinimal"
         TargetType="{x:Type ScrollBar}"
         BasedOn="{StaticResource MaterialDesignScrollBar}">
    <Setter Property="wpf:ScrollBarAssist.ButtonsVisibility" Value="Collapsed" />
    <Setter Property="wpf:ScrollBarAssist.ThumbCornerRadius" Value="0" />
    <Setter Property="wpf:ScrollBarAssist.ThumbHeight" Value="10" />
    <Setter Property="wpf:ScrollBarAssist.ThumbWidth" Value="10" />
  </Style>
</ResourceDictionary>