HorizontalScroll 2.0.0
dotnet add package HorizontalScroll --version 2.0.0
NuGet\Install-Package HorizontalScroll -Version 2.0.0
<PackageReference Include="HorizontalScroll" Version="2.0.0" />
paket add HorizontalScroll --version 2.0.0
#r "nuget: HorizontalScroll, 2.0.0"
// Install HorizontalScroll as a Cake Addin #addin nuget:?package=HorizontalScroll&version=2.0.0 // Install HorizontalScroll as a Cake Tool #tool nuget:?package=HorizontalScroll&version=2.0.0
NuGet package for .NET 6+ that adds attached events for handling inputs from tiltable scroll wheels and provides an easy way to improve scrolling behavior in your application. It's lightweight, easy to use, and provides documentation through intellisense.
Requires the Microsoft.Xaml.Behaviors.Wpf nuget package.
NuGet | Version |
---|---|
HorizontalScroll |
Features
- New events for handling tilt wheel inputs:
HorizontalScroll.PreviewMouseWheelTilt
HorizontalScroll.MouseWheelTilt
- New behavior for
ScrollViewer
controls:- Scrolls horizontally when tilting the mouse wheel
Shift+ScrollWheel
scrolls horizontally- Scrolling sensitivity can be set or data-bound
Usage
Note: No xmlns
declarations are required to use HorizontalScroll in XAML.
Behaviors
HorizontalScrollBehavior
HorizontalScrollBehavior
is a ScrollViewer
behavior that adds support for scrolling horizontally by tilting the mouse wheel or by holding the Shift
key while scrolling up or down.
It can be attached to a specific ScrollViewer in the usual way through XAML, or to all ScrollViewers in a scope (including the ones inside of other controls, like a ListBox
or DataGrid
) with a target-typed style and an EventSetter
.
Attaching to a specific ScrollViewer
:
<ScrollViewer xmlns:i="http://schemas.microsoft.com/xaml/behaviors">
<i:Interaction.Behaviors>
<HorizontalScrollBehavior />
</i:Interaction.Behaviors>
</ScrollViewer>
To attach it to all of the ScrollViewer
controls in a scope, create a target-typed style resource and an EventSetter
for the Loaded
event:
<Application.Resources>
<Style x:Key="EnableHorizontalScrollStyle" TargetType="{x:Type ScrollViewer}">
<EventSetter Event="Loaded" Handler="ScrollViewer_Loaded" />
</Style>
</Application.Resources>
And attach the behavior in the code-behind:
private void ScrollViewer_Loaded(object sender, RoutedEventArgs e)
{
// Tip: You can set the Magnitude property (to a value or binding) in the HorizontalScrollBehavior constructor.
Interaction
.GetBehaviors((ScrollViewer)sender)
.Add(new HScroll.HorizontalScrollBehavior( /* magnitude: 0.5 | magnitudeBinding: new Binding() */ ));
}
You can change the scrolling sensitivity with the Magnitude DependencyProperty, and/or disable the Shift+ScrollWheel input binding with the EnableShiftScroll DependencyProperty.
AttachHorizontalScrollBehavior
In situations where you want to apply a HorizontalScrollBehavior
to a specific control's internal ScrollViewer
without affecting list items,
or in cases where the ScrollViewer
isn't available when the behavior would normally be attached (such as when setting ListView.View
),
you can use AttachHorizontalScrollBehavior
to attach it on the attached control's Loaded
event.
It works by searching the descendants and/or ancestors of the control for a ScrollViewer
, and attaches a HorizontalScrollBehavior
to it.
<ListView xmlns:i="http://schemas.microsoft.com/xaml/behaviors">
<i:Interaction.Behaviors>
<AttachHorizontalScrollBehavior />
</i:Interaction.Behaviors>
<ListView.View>
<GridView>
<GridViewColumn />
</GridView>
</ListView.View>
</ListView>
You can fine-tune the search behavior for finding the ScrollViewer
with the SearchMode
& SearchDepth
properties.
The search mode determines whether ancestors and/or descendants are searched, and in what order.
The search depth determines how many layers of ancestor/descendant controls can be searched.
Events
HorizontalScroll adds two attached events for all subclasses of UIElement
:
Event | Handler Type | EventArgs Type |
---|---|---|
HorizontalScroll.PreviewMouseWheelTilt |
MouseWheelEventHandler |
MouseWheelEventArgs |
HorizontalScroll.MouseWheelTilt |
MouseWheelEventHandler |
MouseWheelEventArgs |
You can get the horizontal delta value from MouseWheelEventArgs.Delta
.
A positive delta means the wheel was tilted right, negative values mean it was tilted left.
Usually the delta value is -120
(left) or 120
(right), but this should not be relied upon as MSDN says other values are allowed in order to perform smaller scrolling increments.
Example
<TextBox
x:Name="MyTextBox"
HorizontalScroll.PreviewMouseWheelTilt="MyTextBox_PreviewMouseWheelTilt"
HorizontalScroll.MouseWheelTilt="MyTextBox_PreviewMouseWheelTilt" />
private void TextBox_PreviewMouseWheelTilt(object sender, MouseWheelEventArgs e)
{
// do something...
// setting e.Handled to true here will prevent the MouseWheelTilt event from firing.
}
private void TextBox_MouseWheelTilt(object sender, MouseWheelEventArgs e)
{
// do something...
}
Product | Versions Compatible and additional computed target framework versions. |
---|---|
.NET | net6.0-windows7.0 is compatible. net7.0-windows was computed. net8.0-windows was computed. |
-
net6.0-windows7.0
- Microsoft.Xaml.Behaviors.Wpf (>= 1.1.77)
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.
[d80b40f] fix UpdateNugetPackages.yaml not firing due to condition