如何在WPF中制作具有单个捕捉点的Slider控件?

时间:2011-01-20 15:13:32

标签: c# wpf wpf-controls slider

例如,Microsoft Word / PowerPoint 2010中的“缩放”控件的捕捉点值为100%。

我知道有可能通过设置刻度和启用IsSnapToTickEnabled使其按特定间隔捕捉,但这不是这里的情况,其中有一个捕捉点,并且滑块可以免费用于其他值。

1 个答案:

答案 0 :(得分:0)

您可以尝试ValueChanged处理程序。

private void Slider_ValueChanged(
    object sender,
    RoutedPropertyChangedEventArgs<double> e)
{
    var slider = sender as Slider;
    var tick = slider.Ticks
        .Where(xx => Math.Abs(e.NewValue - xx) < slider.LargeChange);
    if (tick.Any())
    {
        var newValue = tick.First();
        if (e.NewValue != newValue)
        {
            DispatcherInvoke(() => slider.Value = newValue);
        }
    }
}

示例Slider具有以下设置:

<Slider Ticks="100.0"
        Minimum="0.0"
        Maximum="500.0"
        Value="75.0"
        SmallChange="1.0"
        LargeChange="10.0"
        ValueChanged="Slider_ValueChanged" />