是否可以更改WPF ScrollViewer滚动的数量?我只是想知道是否可以更改滚动查看器,以便在使用鼠标滚轮或滚动查看器箭头时可以更改增量滚动的数量。Wpf ScrollViewer Scroll Amount
12
A
回答
12
简短的回答是:如果不编写一些自定义滚动代码,没有办法做到这一点,但不要让它吓倒你,它并不是那么难。
ScrollViewer通过使用物理单位(即像素)进行滚动或通过与IScrollInfo实现结合使用来使用逻辑单位。这由设置the CanContentScroll property控制,其中值为false表示“使用物理单位滚动内容”,值true表示“逻辑滚动内容”。
那么ScrollViewer如何在逻辑上滚动内容?通过与IScrollInfo实现进行通信。因此,当某人执行逻辑操作时,您可以如何接管面板内容的滚动情况。 Take a look at the documentation for IScrollInfo以获得可以请求滚动的所有测量逻辑单元的列表,但是由于您提到了鼠标滚轮,因此您将主要对MouseWheelUp/Down/Left/Right方法感兴趣。
0
你可以在scrollviewer上实现一个行为。在我的情况下,CanContentScroll
没有工作。下面的解决方案适用于滚动鼠标滚轮以及拖动滚动条。
public class StepSizeBehavior : Behavior<ScrollViewer>
{
public int StepSize { get; set; }
#region Attach & Detach
protected override void OnAttached()
{
CheckHeightModulesStepSize();
AssociatedObject.ScrollChanged += AssociatedObject_ScrollChanged;
base.OnAttached();
}
protected override void OnDetaching()
{
AssociatedObject.ScrollChanged -= AssociatedObject_ScrollChanged;
base.OnDetaching();
}
#endregion
[Conditional("DEBUG")]
private void CheckHeightModulesStepSize()
{
var height = AssociatedObject.Height;
var remainder = height%StepSize;
if (remainder > 0)
{
throw new ArgumentException($"{nameof(StepSize)} should be set to a value by which the height van be divised without a remainder.");
}
}
private void AssociatedObject_ScrollChanged(object sender, ScrollChangedEventArgs e)
{
const double stepSize = 62;
var scrollViewer = (ScrollViewer)sender;
var steps = Math.Round(scrollViewer.VerticalOffset/stepSize, 0);
var scrollPosition = steps * stepSize;
if (scrollPosition >= scrollViewer.ScrollableHeight)
{
scrollViewer.ScrollToBottom();
return;
}
scrollViewer.ScrollToVerticalOffset(scrollPosition);
}
}
你会使用这样的:
<ScrollViewer MaxHeight="248"
VerticalScrollBarVisibility="Auto">
<i:Interaction.Behaviors>
<behaviors:StepSizeBehavior StepSize="62" />
</i:Interaction.Behaviors>
0
我这样做是为了确保scrollbar1.ValueChanged整数:
scrollbar1.Value = Math.Round(scrollbar1.Value, 0, MidpointRounding.AwayFromZero)
相关问题
- 1. WPF ScrollViewer
- 2. wpf scrollviewer scrolltoverticaloffset
- 3. wpf listview itempanel scrollviewer
- 4. WPF ScrollViewer平移
- 5. ScrollViewer问题,WPF
- 6. 使用scrollviewer截图WPF datagrid
- 7. ScrollViewer控件在WPF
- 8. 如何在WPF ContentControl中查找ScrollViewer?
- 9. 如何访问WPF中ComboBox内的ScrollViewer?
- 10. C#WPF - Global ScrollViewer模式
- 11. ScrollViewer wpf - 不起作用
- 12. WPF从TreeView中移除ScrollViewer
- 13. WPF隐藏ScrollViewer的酒吧
- 14. Wpf TreeView的ScrollViewer调整
- 15. 无法让WPF ScrollViewer工作
- 16. WPF停止的ScrollViewer Scroilling?
- 17. 带列表框的WPF ScrollViewer
- 18. Wpf Scrollviewer和ScrollChanged事件
- 19. WPF:文本框内的ScrollViewer
- 20. JS refresh minimu amount
- 21. PayPal Express DoExpressCheckoutPayment Charged Amount
- 22. WPF的ScrollViewer不会滚动起来
- 23. WPF ScrollViewer:水平滚动不起作用
- 24. WPF无法滚动的图像的ScrollViewer
- 25. 如何点击WPF ScrollViewer向下按钮
- 26. WPF的ListView ScrollViewer中双击事件
- 27. WPF其他控件中的ScrollViewer
- 28. WPF scrollviewer - 使用多线程访问
- 29. 的MouseDown上WPF - 使用的ScrollViewer
- 30. ScrollViewer无法在WPF中滚动