强制 WPF 滚动条仅位于整数值上



如果我有一个定义了两个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>

最新更新