How to increase scrollbar width in WPF ScrollViewer?
Solution 1
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>
Solution 2
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>
Solution 3
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>
Solution 4
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);
}
}
JohnIdol
The world will be mine but then I'll be killed by my own AI. Or by a giant simulated C. elegans out of the OpenWorm project. You can follow me on twitter.
Updated on July 09, 2022Comments
-
JohnIdol almost 2 years
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 gestures.
How can I set the width of the WPF ScrollViewer scrollbar?
Note that I don't wanna change the width of all the scrollbars on the device (doable through windows settings) - only the ones in my app.
-
JohnIdol over 14 yearsthanks - it looks like what I need! I have the scrollviewer in a page - when I try to apply your suggestion I get sys:Double was not found --> any clue why? not really familiar with WPF
-
aroon65 over 14 yearsYou need to map the sys namespace to System in mscorlib like this: xmlns:sys="clr-namespace:System;assembly=mscorlib"
-
Eduardo Wada over 8 yearsWhat's this "IsFlicksEnabled" about?
-
lazarus over 8 yearsIsFlicksEnabled related to whether it can respond to gestures when used in a touchscreen setup: msdn.microsoft.com/en-us/library/…