I am working on a touch screen on a small device and the custom width of the scroll-bar is no good as one of my requirements is that everything needs to be doable by finger
Kent's answer can also be applied to easily all scrollbars in your application by placing it in your App.xaml
resources, and by specifying the horizontal height key as well.
<Application
xmlns:sys="clr-namespace:System;assembly=mscorlib"
...
>
<Application.Resources>
<sys:Double x:Key="{x:Static SystemParameters.VerticalScrollBarWidthKey}">50</sys:Double>
<sys:Double x:Key="{x:Static SystemParameters.HorizontalScrollBarHeightKey}">50</sys:Double>
</Application.Resources>
</Application>
Here is a XAML solution:
<Style x:Key="{x:Type ScrollBar}" TargetType="{x:Type ScrollBar}">
<Setter Property="Stylus.IsFlicksEnabled" Value="True" />
<Style.Triggers>
<Trigger Property="Orientation" Value="Horizontal">
<Setter Property="Height" Value="40" />
<Setter Property="MinHeight" Value="40" />
</Trigger>
<Trigger Property="Orientation" Value="Vertical">
<Setter Property="Width" Value="40" />
<Setter Property="MinWidth" Value="40" />
</Trigger>
</Style.Triggers>
</Style>
And if you don't want to use XAML, you can do it in the Application
's constructor, e.g.
using System.Windows;
public partial class App
{
public App()
{
Resources.Add(SystemParameters.VerticalScrollBarWidthKey, 50d);
Resources.Add(SystemParameters.HorizontalScrollBarHeightKey, 50d);
}
}
The ScrollBar
template reaches out for system parameters to determine its width/height (depending on orientation). Therefore, you can override those parameters:
<ScrollViewer>
<ScrollViewer.Resources>
<sys:Double x:Key="{x:Static SystemParameters.VerticalScrollBarWidthKey}">100</sys:Double>
</ScrollViewer.Resources>
</ScrollViewer>