如果我有一个定义了两个Change
属性的 WPF 滚动条,为什么仍然可能有一个像 123.456
这样的实际值,而不是我的步数的倍数?
<ScrollBar Minimum="-5000" Maximum="5000" SmallChange="1" LargeChange="25"></ScrollBar>
有没有办法强制滚动条仅设置整数值、步长倍数或两者?
关于此问题的大多数现有文档似乎都针对WPF滑块(可以使用IsSnapToTickEnabled
(或ScrollViewer(使用IScrollInfo
的内容控件(,它们都没有ScrollBar
的等效解决方案。
我相信
您应该能够控制单步执行行为的粒度。端点(最小值和最大值(是最棘手的,但我将在这里列出粗略的想法:
附加行为:
public class StepScrollBehavior : Behavior<ScrollBar>
{
protected override void OnAttached()
{
AssociatedObject.ValueChanged += AssociatedObject_ValueChanged;
base.OnAttached();
}
protected override void OnDetaching()
{
AssociatedObject.ValueChanged -= AssociatedObject_ValueChanged;
base.OnDetaching();
}
private void AssociatedObject_ValueChanged(object sender,
System.Windows.RoutedPropertyChangedEventArgs<double> e)
{
var scrollBar = (ScrollBar)sender;
var newvalue = Math.Round(e.NewValue, 0);
if (newvalue > scrollBar.Maximum)
newvalue = scrollBar.Maximum;
// feel free to add code to test against the min, too.
scrollBar.Value = newvalue;
}
}
用法:
<ScrollBar Minimum="-5000" Maximum="5000">
<i:Interaction.Behaviors>
<local:StepScrollBehavior/>
</i:Interaction.Behaviors>
</ScrollBar>