Вот простой, полный и работающий класс WPF ScrollViewer
, который имеет свойство привязки данных SpeedFactor
для настройки чувствительности колеса мыши. Установка SpeedFactor
на 1,0 означает поведение, идентичное поведению WPF ScrollViewer
. Значением по умолчанию для свойства зависимости является 2.5 , что обеспечивает очень быструю прокрутку колес.
Конечно, вы также можете создавать дополнительные полезные функции, связываясь с самим свойством SpeedFactor
, то есть с легкостью позволяя пользователю контролировать множитель.
public class WheelSpeedScrollViewer : ScrollViewer
{
public static readonly DependencyProperty SpeedFactorProperty =
DependencyProperty.Register(nameof(SpeedFactor),
typeof(Double),
typeof(WheelSpeedScrollViewer),
new PropertyMetadata(2.5));
public Double SpeedFactor
{
get { return (Double)GetValue(SpeedFactorProperty); }
set { SetValue(SpeedFactorProperty, value); }
}
protected override void OnPreviewMouseWheel(MouseWheelEventArgs e)
{
if (!e.Handled &&
ScrollInfo is ScrollContentPresenter scp &&
ComputedVerticalScrollBarVisibility == Visibility.Visible)
{
scp.SetVerticalOffset(VerticalOffset - e.Delta * SpeedFactor);
e.Handled = true;
}
}
};
Полная демонстрация XAML «быстрой прокрутки колесика мыши», включающая около 3200 элементов данных:
<UserControl x:Class="RemoveDuplicateTextLines.FastScrollDemo"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:MyApp"
xmlns:sys="clr-namespace:System;assembly=mscorlib">
<local:WheelSpeedScrollViewer VerticalScrollBarVisibility="Auto">
<ListBox ItemsSource="{Binding Source={x:Type sys:Object},Path=Assembly.DefinedTypes}" />
</local:WheelSpeedScrollViewer>
</UserControl>
Быстрое колесо мыши: