In WPF/Silverlight ScrollViewer and ScrollBar control doesn't have any property to change color of Thumb dynamically from XAML by setting property. We have to edit the Style of ScrollBar and set the Brush for it according to our requirement. Based on requirement of one of the user on MSDN Forum I decided to create a Custom ScrollViewer which has a property to set Brush for Thumb.
In the above class, I have created a ScrollBarThumbBrush property which we can use to set Brush for Thumb in ScrollBar. And following in the XAML style for CustomScrollViewer control
<
Style
TargetType
=
"ScrollBar"
>
<
Setter
Property
=
"Stylus.IsPressAndHoldEnabled"
Value
=
"False"
/>
<
Setter
Property
=
"Stylus.IsFlicksEnabled"
Value
=
"False"
/>
<
Setter
Property
=
"Background"
Value
=
"#FFF0F0F0"
/>
<
Setter
Property
=
"BorderBrush"
Value
=
"#FFF0F0F0"
/>
<
Setter
Property
=
"Foreground"
Value
=
"{DynamicResource {x:Static SystemColors.ControlTextBrushKey}}"
/>
<
Setter
Property
=
"BorderThickness"
Value
=
"1,0"
/>
<
Setter
Property
=
"Width"
Value
=
"{DynamicResource {x:Static SystemParameters.VerticalScrollBarWidthKey}}"
/>
<
Setter
Property
=
"MinWidth"
Value
=
"{DynamicResource {x:Static SystemParameters.VerticalScrollBarWidthKey}}"
/>
<
Setter
Property
=
"Template"
>
<
Setter.Value
>
<
ControlTemplate
TargetType
=
"ScrollBar"
>
<
Grid
x:Name
=
"Bg"
SnapsToDevicePixels
=
"True"
>
<
Grid.RowDefinitions
>
<
RowDefinition
MaxHeight
=
"{DynamicResource {x:Static SystemParameters.VerticalScrollBarButtonHeightKey}}"
/>
<
RowDefinition
Height
=
"1E-05*"
/>
<
RowDefinition
MaxHeight
=
"{DynamicResource {x:Static SystemParameters.VerticalScrollBarButtonHeightKey}}"
/>
</
Grid.RowDefinitions
>
<
Border
BorderBrush
=
"{TemplateBinding BorderBrush}"
BorderThickness
=
"{TemplateBinding BorderThickness}"
Background
=
"{TemplateBinding Background}"
Grid.Row
=
"1"
/>
<
RepeatButton
x:Name
=
"PART_LineUpButton"
Command
=
"ScrollBar.LineUpCommand"
IsEnabled
=
"{TemplateBinding IsMouseOver}"
>
<
RepeatButton.Style
>
<
Style
TargetType
=
"{x:Type RepeatButton}"
>
<
Setter
Property
=
"FocusVisualStyle"
>
<
Setter.Value
>
<
Style
>
<
Setter
Property
=
"Control.Template"
>
<
Setter.Value
>
<
ControlTemplate
>
<
Rectangle
Margin
=
"2"
SnapsToDevicePixels
=
"True"
Stroke
=
"{DynamicResource {x:Static SystemColors.ControlTextBrushKey}}"
StrokeThickness
=
"1"
StrokeDashArray
=
"1 2"
/>
</
ControlTemplate
>
</
Setter.Value
>
</
Setter
>
</
Style
>
</
Setter.Value
>
</
Setter
>
<
Setter
Property
=
"BorderThickness"
Value
=
"1"
/>
<
Setter
Property
=
"HorizontalContentAlignment"
Value
=
"Center"
/>
<
Setter
Property
=
"VerticalContentAlignment"
Value
=
"Center"
/>
<
Setter
Property
=
"Padding"
Value
=
"1"
/>
<
Setter
Property
=
"Focusable"
Value
=
"False"
/>
<
Setter
Property
=
"IsTabStop"
Value
=
"False"
/>
<
Setter
Property
=
"Template"
>
<
Setter.Value
>
<
ControlTemplate
TargetType
=
"{x:Type RepeatButton}"
>
<
Border
x:Name
=
"border"
BorderBrush
=
"#FFF0F0F0"
BorderThickness
=
"1"
Background
=
"#FFF0F0F0"
SnapsToDevicePixels
=
"True"
>
<
ContentPresenter
x:Name
=
"contentPresenter"
ContentTemplate
=
"{TemplateBinding ContentTemplate}"
Content
=
"{TemplateBinding Content}"
ContentStringFormat
=
"{TemplateBinding ContentStringFormat}"
Focusable
=
"False"
HorizontalAlignment
=
"{TemplateBinding HorizontalContentAlignment}"
Margin
=
"{TemplateBinding Padding}"
SnapsToDevicePixels
=
"{TemplateBinding SnapsToDevicePixels}"
VerticalAlignment
=
"{TemplateBinding VerticalContentAlignment}"
/>
</
Border
>
<
ControlTemplate.Triggers
>
<
Trigger
Property
=
"IsMouseOver"
Value
=
"True"
>
<
Setter
Property
=
"Background"
TargetName
=
"border"
Value
=
"#FFDADADA"
/>
<
Setter
Property
=
"BorderBrush"
TargetName
=
"border"
Value
=
"#FFDADADA"
/>
</
Trigger
>
<
Trigger
Property
=
"IsPressed"
Value
=
"True"
>
<
Setter
Property
=
"Background"
TargetName
=
"border"
Value
=
"#FF606060"
/>
<
Setter
Property
=
"BorderBrush"
TargetName
=
"border"
Value
=
"#FF606060"
/>
</
Trigger
>
<
Trigger
Property
=
"IsEnabled"
Value
=
"False"
>
<
Setter
Property
=
"Opacity"
TargetName
=
"contentPresenter"
Value
=
"0.56"
/>
<
Setter
Property
=
"Background"
TargetName
=
"border"
Value
=
"#FFF0F0F0"
/>
<
Setter
Property
=
"BorderBrush"
TargetName
=
"border"
Value
=
"#FFF0F0F0"
/>
</
Trigger
>
</
ControlTemplate.Triggers
>
</
ControlTemplate
>
</
Setter.Value
>
</
Setter
>
</
Style
>
</
RepeatButton.Style
>
<
Path
x:Name
=
"ArrowTop"
Data
=
"M0,4C0,4 0,6 0,6 0,6 3.5,2.5 3.5,2.5 3.5,2.5 7,6 7,6 7,6 7,4 7,4 7,4 3.5,0.5 3.5,0.5 3.5,0.5 0,4 0,4z"
Fill
=
"#FF606060"
Margin
=
"3,4,3,3"
Stretch
=
"Uniform"
/>
</
RepeatButton
>
<
Track
x:Name
=
"PART_Track"
IsDirectionReversed
=
"True"
IsEnabled
=
"{TemplateBinding IsMouseOver}"
Grid.Row
=
"1"
>
<
Track.DecreaseRepeatButton
>
<
RepeatButton
Command
=
"ScrollBar.PageUpCommand"
>
<
RepeatButton.Style
>
<
Style
TargetType
=
"{x:Type RepeatButton}"
>
<
Setter
Property
=
"OverridesDefaultStyle"
Value
=
"True"
/>
<
Setter
Property
=
"Background"
Value
=
"Transparent"
/>
<
Setter
Property
=
"Focusable"
Value
=
"False"
/>
<
Setter
Property
=
"IsTabStop"
Value
=
"False"
/>
<
Setter
Property
=
"Template"
>
<
Setter.Value
>
<
ControlTemplate
TargetType
=
"{x:Type RepeatButton}"
>
<
Rectangle
Fill
=
"{TemplateBinding Background}"
Height
=
"{TemplateBinding Height}"
Width
=
"{TemplateBinding Width}"
/>
</
ControlTemplate
>
</
Setter.Value
>
</
Setter
>
</
Style
>
</
RepeatButton.Style
>
</
RepeatButton
>
</
Track.DecreaseRepeatButton
>
<
Track.IncreaseRepeatButton
>
<
RepeatButton
Command
=
"ScrollBar.PageDownCommand"
>
<
RepeatButton.Style
>
<
Style
TargetType
=
"{x:Type RepeatButton}"
>
<
Setter
Property
=
"OverridesDefaultStyle"
Value
=
"True"
/>
<
Setter
Property
=
"Background"
Value
=
"Transparent"
/>
<
Setter
Property
=
"Focusable"
Value
=
"False"
/>
<
Setter
Property
=
"IsTabStop"
Value
=
"False"
/>
<
Setter
Property
=
"Template"
>
<
Setter.Value
>
<
ControlTemplate
TargetType
=
"{x:Type RepeatButton}"
>
<
Rectangle
Fill
=
"{TemplateBinding Background}"
Height
=
"{TemplateBinding Height}"
Width
=
"{TemplateBinding Width}"
/>
</
ControlTemplate
>
</
Setter.Value
>
</
Setter
>
</
Style
>
</
RepeatButton.Style
>
</
RepeatButton
>
</
Track.IncreaseRepeatButton
>
<
Track.Thumb
>
<
Thumb
>
<
Thumb.Style
>
<
Style
TargetType
=
"{x:Type Thumb}"
>
<
Setter
Property
=
"OverridesDefaultStyle"
Value
=
"True"
/>
<
Setter
Property
=
"IsTabStop"
Value
=
"False"
/>
<
Setter
Property
=
"Template"
>
<
Setter.Value
>
<
ControlTemplate
TargetType
=
"{x:Type Thumb}"
>
<
Rectangle
x:Name
=
"rectangle"
Fill
=
"{Binding Path=ScrollBarThumbBrush, RelativeSource={RelativeSource AncestorType=my:CustomScrollViewer}}"
Height
=
"{TemplateBinding Height}"
SnapsToDevicePixels
=
"True"
Width
=
"{TemplateBinding Width}"
/>
<
ControlTemplate.Triggers
>
<
Trigger
Property
=
"IsMouseOver"
Value
=
"True"
>
<
Setter
Property
=
"Fill"
TargetName
=
"rectangle"
Value
=
"#FFA6A6A6"
/>
</
Trigger
>
<
Trigger
Property
=
"IsDragging"
Value
=
"True"
>
<
Setter
Property
=
"Fill"
TargetName
=
"rectangle"
Value
=
"#FF606060"
/>
</
Trigger
>
</
ControlTemplate.Triggers
>
</
ControlTemplate
>
</
Setter.Value
>
</
Setter
>
</
Style
>
</
Thumb.Style
>
</
Thumb
>
</
Track.Thumb
>
</
Track
>
<
RepeatButton
x:Name
=
"PART_LineDownButton"
Command
=
"ScrollBar.LineDownCommand"
IsEnabled
=
"{TemplateBinding IsMouseOver}"
Grid.Row
=
"2"
>
<
RepeatButton.Style
>
<
Style
TargetType
=
"{x:Type RepeatButton}"
>
<
Setter
Property
=
"FocusVisualStyle"
>
<
Setter.Value
>
<
Style
>
<
Setter
Property
=
"Control.Template"
>
<
Setter.Value
>
<
ControlTemplate
>
<
Rectangle
Margin
=
"2"
SnapsToDevicePixels
=
"True"
Stroke
=
"{DynamicResource {x:Static SystemColors.ControlTextBrushKey}}"
StrokeThickness
=
"1"
StrokeDashArray
=
"1 2"
/>
</
ControlTemplate
>
</
Setter.Value
>
</
Setter
>
</
Style
>
</
Setter.Value
>
</
Setter
>
<
Setter
Property
=
"BorderThickness"
Value
=
"1"
/>
<
Setter
Property
=
"HorizontalContentAlignment"
Value
=
"Center"
/>
<
Setter
Property
=
"VerticalContentAlignment"
Value
=
"Center"
/>
<
Setter
Property
=
"Padding"
Value
=
"1"
/>
<
Setter
Property
=
"Focusable"
Value
=
"False"
/>
<
Setter
Property
=
"IsTabStop"
Value
=
"False"
/>
<
Setter
Property
=
"Template"
>
<
Setter.Value
>
<
ControlTemplate
TargetType
=
"{x:Type RepeatButton}"
>
<
Border
x:Name
=
"border"
BorderBrush
=
"#FFF0F0F0"
BorderThickness
=
"1"
Background
=
"#FFF0F0F0"
SnapsToDevicePixels
=
"True"
>
<
ContentPresenter
x:Name
=
"contentPresenter"
ContentTemplate
=
"{TemplateBinding ContentTemplate}"
Content
=
"{TemplateBinding Content}"
ContentStringFormat
=
"{TemplateBinding ContentStringFormat}"
Focusable
=
"False"
HorizontalAlignment
=
"{TemplateBinding HorizontalContentAlignment}"
Margin
=
"{TemplateBinding Padding}"
SnapsToDevicePixels
=
"{TemplateBinding SnapsToDevicePixels}"
VerticalAlignment
=
"{TemplateBinding VerticalContentAlignment}"
/>
</
Border
>
<
ControlTemplate.Triggers
>
<
Trigger
Property
=
"IsMouseOver"
Value
=
"True"
>
<
Setter
Property
=
"Background"
TargetName
=
"border"
Value
=
"#FFDADADA"
/>
<
Setter
Property
=
"BorderBrush"
TargetName
=
"border"
Value
=
"#FFDADADA"
/>
</
Trigger
>
<
Trigger
Property
=
"IsPressed"
Value
=
"True"
>
<
Setter
Property
=
"Background"
TargetName
=
"border"
Value
=
"#FF606060"
/>
<
Setter
Property
=
"BorderBrush"
TargetName
=
"border"
Value
=
"#FF606060"
/>
</
Trigger
>
<
Trigger
Property
=
"IsEnabled"
Value
=
"False"
>
<
Setter
Property
=
"Opacity"
TargetName
=
"contentPresenter"
Value
=
"0.56"
/>
<
Setter
Property
=
"Background"
TargetName
=
"border"
Value
=
"#FFF0F0F0"
/>
<
Setter
Property
=
"BorderBrush"
TargetName
=
"border"
Value
=
"#FFF0F0F0"
/>
</
Trigger
>
</
ControlTemplate.Triggers
>
</
ControlTemplate
>
</
Setter.Value
>
</
Setter
>
</
Style
>
</
RepeatButton.Style
>
<
Path
x:Name
=
"ArrowBottom"
Data
=
"M0,2.5C0,2.5 0,0.5 0,0.5 0,0.5 3.5,4 3.5,4 3.5,4 7,0.5 7,0.5 7,0.5 7,2.5 7,2.5 7,2.5 3.5,6 3.5,6 3.5,6 0,2.5 0,2.5z"
Fill
=
"#FF606060"
Margin
=
"3,4,3,3"
Stretch
=
"Uniform"
/>
</
RepeatButton
>
</
Grid
>
<
ControlTemplate.Triggers
>
<
MultiDataTrigger
>
<
MultiDataTrigger.Conditions
>
<
Condition
Binding
=
"{Binding IsMouseOver, ElementName=PART_LineDownButton}"
Value
=
"true"
/>
<
Condition
Binding
=
"{Binding IsPressed, ElementName=PART_LineDownButton}"
Value
=
"true"
/>
</
MultiDataTrigger.Conditions
>
<
Setter
Property
=
"Fill"
TargetName
=
"ArrowBottom"
Value
=
"White"
/>
</
MultiDataTrigger
>
<
MultiDataTrigger
>
<
MultiDataTrigger.Conditions
>
<
Condition
Binding
=
"{Binding IsMouseOver, ElementName=PART_LineUpButton}"
Value
=
"true"
/>
<
Condition
Binding
=
"{Binding IsPressed, ElementName=PART_LineUpButton}"
Value
=
"true"
/>
</
MultiDataTrigger.Conditions
>
<
Setter
Property
=
"Fill"
TargetName
=
"ArrowTop"
Value
=
"White"
/>
</
MultiDataTrigger
>
<
MultiDataTrigger
>
<
MultiDataTrigger.Conditions
>
<
Condition
Binding
=
"{Binding IsMouseOver, ElementName=PART_LineDownButton}"
Value
=
"true"
/>
<
Condition
Binding
=
"{Binding IsPressed, ElementName=PART_LineDownButton}"
Value
=
"false"
/>
</
MultiDataTrigger.Conditions
>
<
Setter
Property
=
"Fill"
TargetName
=
"ArrowBottom"
Value
=
"Black"
/>
</
MultiDataTrigger
>
<
MultiDataTrigger
>
<
MultiDataTrigger.Conditions
>
<
Condition
Binding
=
"{Binding IsMouseOver, ElementName=PART_LineUpButton}"
Value
=
"true"
/>
<
Condition
Binding
=
"{Binding IsPressed, ElementName=PART_LineUpButton}"
Value
=
"false"
/>
</
MultiDataTrigger.Conditions
>
<
Setter
Property
=
"Fill"
TargetName
=
"ArrowTop"
Value
=
"Black"
/>
</
MultiDataTrigger
>
<
Trigger
Property
=
"IsEnabled"
Value
=
"False"
>
<
Setter
Property
=
"Fill"
TargetName
=
"ArrowTop"
Value
=
"#FFBFBFBF"
/>
<
Setter
Property
=
"Fill"
TargetName
=
"ArrowBottom"
Value
=
"#FFBFBFBF"
/>
</
Trigger
>
</
ControlTemplate.Triggers
>
</
ControlTemplate
>
</
Setter.Value
>
</
Setter
>
<
Style.Triggers
>
<
Trigger
Property
=
"Orientation"
Value
=
"Horizontal"
>
<
Setter
Property
=
"Width"
Value
=
"Auto"
/>
<
Setter
Property
=
"MinWidth"
Value
=
"0"
/>
<
Setter
Property
=
"Height"
Value
=
"{DynamicResource {x:Static SystemParameters.HorizontalScrollBarHeightKey}}"
/>
<
Setter
Property
=
"MinHeight"
Value
=
"{DynamicResource {x:Static SystemParameters.HorizontalScrollBarHeightKey}}"
/>
<
Setter
Property
=
"BorderThickness"
Value
=
"0,1"
/>
<
Setter
Property
=
"Template"
>
<
Setter.Value
>
<
ControlTemplate
TargetType
=
"{x:Type ScrollBar}"
>
<
Grid
x:Name
=
"Bg"
SnapsToDevicePixels
=
"True"
>
<
Grid.ColumnDefinitions
>
<
ColumnDefinition
MaxWidth
=
"{DynamicResource {x:Static SystemParameters.HorizontalScrollBarButtonWidthKey}}"
/>
<
ColumnDefinition
Width
=
"1E-05*"
/>
<
ColumnDefinition
MaxWidth
=
"{DynamicResource {x:Static SystemParameters.HorizontalScrollBarButtonWidthKey}}"
/>
</
Grid.ColumnDefinitions
>
<
Border
BorderBrush
=
"{TemplateBinding BorderBrush}"
BorderThickness
=
"{TemplateBinding BorderThickness}"
Background
=
"{TemplateBinding Background}"
Grid.Column
=
"1"
/>
<
RepeatButton
x:Name
=
"PART_LineLeftButton"
Command
=
"ScrollBar.LineLeftCommand"
IsEnabled
=
"{TemplateBinding IsMouseOver}"
>
<
RepeatButton.Style
>
<
Style
TargetType
=
"{x:Type RepeatButton}"
>
<
Setter
Property
=
"FocusVisualStyle"
>
<
Setter.Value
>
<
Style
>
<
Setter
Property
=
"Control.Template"
>
<
Setter.Value
>
<
ControlTemplate
>
<
Rectangle
Margin
=
"2"
SnapsToDevicePixels
=
"True"
Stroke
=
"{DynamicResource {x:Static SystemColors.ControlTextBrushKey}}"
StrokeThickness
=
"1"
StrokeDashArray
=
"1 2"
/>
</
ControlTemplate
>
</
Setter.Value
>
</
Setter
>
</
Style
>
</
Setter.Value
>
</
Setter
>
<
Setter
Property
=
"BorderThickness"
Value
=
"1"
/>
<
Setter
Property
=
"HorizontalContentAlignment"
Value
=
"Center"
/>
<
Setter
Property
=
"VerticalContentAlignment"
Value
=
"Center"
/>
<
Setter
Property
=
"Padding"
Value
=
"1"
/>
<
Setter
Property
=
"Focusable"
Value
=
"False"
/>
<
Setter
Property
=
"IsTabStop"
Value
=
"False"
/>
<
Setter
Property
=
"Template"
>
<
Setter.Value
>
<
ControlTemplate
TargetType
=
"{x:Type RepeatButton}"
>
<
Border
x:Name
=
"border"
BorderBrush
=
"#FFF0F0F0"
BorderThickness
=
"1"
Background
=
"#FFF0F0F0"
SnapsToDevicePixels
=
"True"
>
<
ContentPresenter
x:Name
=
"contentPresenter"
ContentTemplate
=
"{TemplateBinding ContentTemplate}"
Content
=
"{TemplateBinding Content}"
ContentStringFormat
=
"{TemplateBinding ContentStringFormat}"
Focusable
=
"False"
HorizontalAlignment
=
"{TemplateBinding HorizontalContentAlignment}"
Margin
=
"{TemplateBinding Padding}"
SnapsToDevicePixels
=
"{TemplateBinding SnapsToDevicePixels}"
VerticalAlignment
=
"{TemplateBinding VerticalContentAlignment}"
/>
</
Border
>
<
ControlTemplate.Triggers
>
<
Trigger
Property
=
"IsMouseOver"
Value
=
"True"
>
<
Setter
Property
=
"Background"
TargetName
=
"border"
Value
=
"#FFDADADA"
/>
<
Setter
Property
=
"BorderBrush"
TargetName
=
"border"
Value
=
"#FFDADADA"
/>
</
Trigger
>
<
Trigger
Property
=
"IsPressed"
Value
=
"True"
>
<
Setter
Property
=
"Background"
TargetName
=
"border"
Value
=
"#FF606060"
/>
<
Setter
Property
=
"BorderBrush"
TargetName
=
"border"
Value
=
"#FF606060"
/>
</
Trigger
>
<
Trigger
Property
=
"IsEnabled"
Value
=
"False"
>
<
Setter
Property
=
"Opacity"
TargetName
=
"contentPresenter"
Value
=
"0.56"
/>
<
Setter
Property
=
"Background"
TargetName
=
"border"
Value
=
"#FFF0F0F0"
/>
<
Setter
Property
=
"BorderBrush"
TargetName
=
"border"
Value
=
"#FFF0F0F0"
/>
</
Trigger
>
</
ControlTemplate.Triggers
>
</
ControlTemplate
>
</
Setter.Value
>
</
Setter
>
</
Style
>
</
RepeatButton.Style
>
<
Path
x:Name
=
"ArrowLeft"
Data
=
"M3.18,7C3.18,7 5,7 5,7 5,7 1.81,3.5 1.81,3.5 1.81,3.5 5,0 5,0 5,0 3.18,0 3.18,0 3.18,0 0,3.5 0,3.5 0,3.5 3.18,7 3.18,7z"
Fill
=
"#FF606060"
Margin
=
"3"
Stretch
=
"Uniform"
/>
</
RepeatButton
>
<
Track
x:Name
=
"PART_Track"
Grid.Column
=
"1"
IsEnabled
=
"{TemplateBinding IsMouseOver}"
>
<
Track.DecreaseRepeatButton
>
<
RepeatButton
Command
=
"ScrollBar.PageLeftCommand"
>
<
RepeatButton.Style
>
<
Style
TargetType
=
"{x:Type RepeatButton}"
>
<
Setter
Property
=
"OverridesDefaultStyle"
Value
=
"True"
/>
<
Setter
Property
=
"Background"
Value
=
"Transparent"
/>
<
Setter
Property
=
"Focusable"
Value
=
"False"
/>
<
Setter
Property
=
"IsTabStop"
Value
=
"False"
/>
<
Setter
Property
=
"Template"
>
<
Setter.Value
>
<
ControlTemplate
TargetType
=
"{x:Type RepeatButton}"
>
<
Rectangle
Fill
=
"{TemplateBinding Background}"
Height
=
"{TemplateBinding Height}"
Width
=
"{TemplateBinding Width}"
/>
</
ControlTemplate
>
</
Setter.Value
>
</
Setter
>
</
Style
>
</
RepeatButton.Style
>
</
RepeatButton
>
</
Track.DecreaseRepeatButton
>
<
Track.IncreaseRepeatButton
>
<
RepeatButton
Command
=
"ScrollBar.PageRightCommand"
>
<
RepeatButton.Style
>
<
Style
TargetType
=
"{x:Type RepeatButton}"
>
<
Setter
Property
=
"OverridesDefaultStyle"
Value
=
"True"
/>
<
Setter
Property
=
"Background"
Value
=
"Transparent"
/>
<
Setter
Property
=
"Focusable"
Value
=
"False"
/>
<
Setter
Property
=
"IsTabStop"
Value
=
"False"
/>
<
Setter
Property
=
"Template"
>
<
Setter.Value
>
<
ControlTemplate
TargetType
=
"{x:Type RepeatButton}"
>
<
Rectangle
Fill
=
"{TemplateBinding Background}"
Height
=
"{TemplateBinding Height}"
Width
=
"{TemplateBinding Width}"
/>
</
ControlTemplate
>
</
Setter.Value
>
</
Setter
>
</
Style
>
</
RepeatButton.Style
>
</
RepeatButton
>
</
Track.IncreaseRepeatButton
>
<
Track.Thumb
>
<
Thumb
>
<
Thumb.Style
>
<
Style
TargetType
=
"{x:Type Thumb}"
>
<
Setter
Property
=
"OverridesDefaultStyle"
Value
=
"True"
/>
<
Setter
Property
=
"IsTabStop"
Value
=
"False"
/>
<
Setter
Property
=
"Template"
>
<
Setter.Value
>
<
ControlTemplate
TargetType
=
"{x:Type Thumb}"
>
<
Rectangle
x:Name
=
"rectangle"
Fill
=
"{Binding Path=ScrollBarThumbBrush, RelativeSource={RelativeSource AncestorType=my:CustomScrollViewer}}"
Height
=
"{TemplateBinding Height}"
SnapsToDevicePixels
=
"True"
Width
=
"{TemplateBinding Width}"
/>
<
ControlTemplate.Triggers
>
<
Trigger
Property
=
"IsMouseOver"
Value
=
"True"
>
<
Setter
Property
=
"Fill"
TargetName
=
"rectangle"
Value
=
"#FFA6A6A6"
/>
</
Trigger
>
<
Trigger
Property
=
"IsDragging"
Value
=
"True"
>
<
Setter
Property
=
"Fill"
TargetName
=
"rectangle"
Value
=
"#FF606060"
/>
</
Trigger
>
</
ControlTemplate.Triggers
>
</
ControlTemplate
>
</
Setter.Value
>
</
Setter
>
</
Style
>
</
Thumb.Style
>
</
Thumb
>
</
Track.Thumb
>
</
Track
>
<
RepeatButton
x:Name
=
"PART_LineRightButton"
Grid.Column
=
"2"
Command
=
"ScrollBar.LineRightCommand"
IsEnabled
=
"{TemplateBinding IsMouseOver}"
>
<
RepeatButton.Style
>
<
Style
TargetType
=
"{x:Type RepeatButton}"
>
<
Setter
Property
=
"FocusVisualStyle"
>
<
Setter.Value
>
<
Style
>
<
Setter
Property
=
"Control.Template"
>
<
Setter.Value
>
<
ControlTemplate
>
<
Rectangle
Margin
=
"2"
SnapsToDevicePixels
=
"True"
Stroke
=
"{DynamicResource {x:Static SystemColors.ControlTextBrushKey}}"
StrokeThickness
=
"1"
StrokeDashArray
=
"1 2"
/>
</
ControlTemplate
>
</
Setter.Value
>
</
Setter
>
</
Style
>
</
Setter.Value
>
</
Setter
>
<
Setter
Property
=
"BorderThickness"
Value
=
"1"
/>
<
Setter
Property
=
"HorizontalContentAlignment"
Value
=
"Center"
/>
<
Setter
Property
=
"VerticalContentAlignment"
Value
=
"Center"
/>
<
Setter
Property
=
"Padding"
Value
=
"1"
/>
<
Setter
Property
=
"Focusable"
Value
=
"False"
/>
<
Setter
Property
=
"IsTabStop"
Value
=
"False"
/>
<
Setter
Property
=
"Template"
>
<
Setter.Value
>
<
ControlTemplate
TargetType
=
"{x:Type RepeatButton}"
>
<
Border
x:Name
=
"border"
BorderBrush
=
"#FFF0F0F0"
BorderThickness
=
"1"
Background
=
"#FFF0F0F0"
SnapsToDevicePixels
=
"True"
>
<
ContentPresenter
x:Name
=
"contentPresenter"
ContentTemplate
=
"{TemplateBinding ContentTemplate}"
Content
=
"{TemplateBinding Content}"
ContentStringFormat
=
"{TemplateBinding ContentStringFormat}"
Focusable
=
"False"
HorizontalAlignment
=
"{TemplateBinding HorizontalContentAlignment}"
Margin
=
"{TemplateBinding Padding}"
SnapsToDevicePixels
=
"{TemplateBinding SnapsToDevicePixels}"
VerticalAlignment
=
"{TemplateBinding VerticalContentAlignment}"
/>
</
Border
>
<
ControlTemplate.Triggers
>
<
Trigger
Property
=
"IsMouseOver"
Value
=
"True"
>
<
Setter
Property
=
"Background"
TargetName
=
"border"
Value
=
"#FFDADADA"
/>
<
Setter
Property
=
"BorderBrush"
TargetName
=
"border"
Value
=
"#FFDADADA"
/>
</
Trigger
>
<
Trigger
Property
=
"IsPressed"
Value
=
"True"
>
<
Setter
Property
=
"Background"
TargetName
=
"border"
Value
=
"#FF606060"
/>
<
Setter
Property
=
"BorderBrush"
TargetName
=
"border"
Value
=
"#FF606060"
/>
</
Trigger
>
<
Trigger
Property
=
"IsEnabled"
Value
=
"False"
>
<
Setter
Property
=
"Opacity"
TargetName
=
"contentPresenter"
Value
=
"0.56"
/>
<
Setter
Property
=
"Background"
TargetName
=
"border"
Value
=
"#FFF0F0F0"
/>
<
Setter
Property
=
"BorderBrush"
TargetName
=
"border"
Value
=
"#FFF0F0F0"
/>
</
Trigger
>
</
ControlTemplate.Triggers
>
</
ControlTemplate
>
</
Setter.Value
>
</
Setter
>
</
Style
>
</
RepeatButton.Style
>
<
Path
x:Name
=
"ArrowRight"
Data
=
"M1.81,7C1.81,7 0,7 0,7 0,7 3.18,3.5 3.18,3.5 3.18,3.5 0,0 0,0 0,0 1.81,0 1.81,0 1.81,0 5,3.5 5,3.5 5,3.5 1.81,7 1.81,7z"
Fill
=
"#FF606060"
Margin
=
"3"
Stretch
=
"Uniform"
/>
</
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
Property
=
"Fill"
TargetName
=
"ArrowRight"
Value
=
"White"
/>
</
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
Property
=
"Fill"
TargetName
=
"ArrowLeft"
Value
=
"White"
/>
</
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
Property
=
"Fill"
TargetName
=
"ArrowRight"
Value
=
"Black"
/>
</
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
Property
=
"Fill"
TargetName
=
"ArrowLeft"
Value
=
"Black"
/>
</
MultiDataTrigger
>
<
Trigger
Property
=
"IsEnabled"
Value
=
"False"
>
<
Setter
Property
=
"Fill"
TargetName
=
"ArrowLeft"
Value
=
"#FFBFBFBF"
/>
<
Setter
Property
=
"Fill"
TargetName
=
"ArrowRight"
Value
=
"#FFBFBFBF"
/>
</
Trigger
>
</
ControlTemplate.Triggers
>
</
ControlTemplate
>
</
Setter.Value
>
</
Setter
>
</
Trigger
>
</
Style.Triggers
>
</Style>
Now we can use the CustomScrollViewer control and set ScrollBarThumbBrush property as shown in following code in the project where we need Thumb color as per our requirement.