如何使WPF滑块仅捕捉到离散整数位置



我经常想要一个WPF滑块,它的行为就像旧的System.Windows.Forms.TrackBar。也就是说,我想要一个从X到Y的滑块,但只允许用户将其移动到离散的整数位置。

既然Slider上的Value属性是双的,那么在WPF中如何做到这一点?

简单的答案是,您可以利用IsSnapToTickEnabledTickFrequency属性。也就是说,启用捕捉到刻度,并将刻度频率设置为1。

或者,换句话说。。。利用蜱虫。。。但你不一定要显示你正在捕捉的蜱虫。

查看以下xaml:

<Slider
    Orientation="Vertical"
    Height="200"
    Minimum="0"
    Maximum="10"
    Value="0"
    IsSnapToTickEnabled="True"
    TickFrequency="1"
/>

如果以正确的方式设置勾号,则可以使用IsSnapToTickEnabled。这对我来说效果很好。有关详细信息,请参阅MSDN。

对于那些想要捕捉到特定位置的人,您也可以使用Ticks属性:

<Slider Minimum="1" Maximum="500" IsSnapToTickEnabled="True" Ticks="1,100,200,350,500" />

捕捉技巧很方便,但也有局限性,例如,如果您只想显示有效记号的子集。我已经成功地使用了两种选择:要么绑定到整数,要么四舍五入新值。下面是一个组合示例:

public int MyProperty { get; set; }
private void slider1_ValueChanged(object sender,
    RoutedPropertyChangedEventArgs<double> e)
{
    (sender as Slider).Value = Math.Round(e.NewValue, 0);
}
<Slider
    Name="slider1"
    TickPlacement="TopLeft"
    AutoToolTipPlacement="BottomRight"
    ValueChanged="slider1_ValueChanged"
    Value="{Binding MyProperty}"
    Minimum="0" Maximum="100" SmallChange="1" LargeChange="10"
    Ticks="0, 10, 20, 30, 40, 50, 60, 70, 80, 90, 100"/>

我不知道这两个动作的表现与快照技巧相比如何,但我没有遇到任何麻烦。

*如果将滑块的值绑定到一种类型的文本字段,您将体验到,如果使用鼠标,文本字段每隔一段时间就会显示小数。如果同时绑定到一个int,那么空字符串将导致抛出一个转换异常,该异常会短暂地阻塞UI。这些问题还不够严重,我无法寻找解决方案。

相关内容

  • 没有找到相关文章

最新更新