HandyControl
HandyControl copied to clipboard
滚动条鼠标滚轮补偿
public double MouseWheelDelta
{
get { return (double) GetValue(MouseWheelDeltaProperty); }
set { SetValue(MouseWheelDeltaProperty, value); }
}
/// <summary>
/// 鼠标滚动补偿
/// </summary>
public static readonly DependencyProperty MouseWheelDeltaProperty =
DependencyProperty.Register("MouseWheelDelta", typeof(double), typeof(ScrollViewer), new PropertyMetadata(0d));
protected override void OnMouseWheel(MouseWheelEventArgs e)
{
if (!CanMouseWheel) return;
var mouseWheelDelta = e.Delta > 0 ? 0 - MouseWheelDelta : 0 + MouseWheelDelta;
if (!IsInertiaEnabled)
{
if (Orientation == Orientation.Vertical)
{
base.OnMouseWheel(e);
this.ScrollToVerticalOffset(this.VerticalOffset + mouseWheelDelta);
}
else
{
_totalHorizontalOffset = HorizontalOffset;
CurrentHorizontalOffset = HorizontalOffset;
_totalHorizontalOffset = Math.Min(Math.Max(0, _totalHorizontalOffset - e.Delta), ScrollableWidth);
CurrentHorizontalOffset = _totalHorizontalOffset;
this.ScrollToHorizontalOffset(this.HorizontalOffset + mouseWheelDelta);
}
return;
}
e.Handled = true;
if (Orientation == Orientation.Vertical)
{
if (!_isRunning)
{
_totalVerticalOffset = VerticalOffset;
CurrentVerticalOffset = VerticalOffset;
}
_totalVerticalOffset = Math.Min(Math.Max(0, _totalVerticalOffset - e.Delta), ScrollableHeight);
ScrollToVerticalOffsetWithAnimation(_totalVerticalOffset+ mouseWheelDelta);
}
else
{
if (!_isRunning)
{
_totalHorizontalOffset = HorizontalOffset;
CurrentHorizontalOffset = HorizontalOffset;
}
_totalHorizontalOffset = Math.Min(Math.Max(0, _totalHorizontalOffset - e.Delta), ScrollableWidth);
ScrollToHorizontalOffsetWithAnimation(_totalHorizontalOffset+ mouseWheelDelta);
}
}
默认的速率太慢了,加入了滚动补偿,大数据列表使用体验明显提高。
为何不提 pr 呢?感觉更合适。
已经提交啦