你如何使一个WPF滑块只能捕捉离散的整数位置?
我经常想要一个像旧的System.Windows.Forms.TrackBar一样的WPF滑块。 也就是说,我需要一个从X到Y的滑块,但只允许用户将其移动到离散的整数位置。
在WPF中如何做到这一点,因为Slider的Value属性是双重的?
如果以正确的方式设置刻度线,则可以使用IsSnapToTickEnabled 。 这对我来说工作得很好。 详情请参阅MSDN 。
简单的答案是您利用了IsSnapToTickEnabled和TickFrequency属性。 也就是说,打开打勾并设置打勾频率为1。
或者换句话说,就是利用蜱虫,但是你不一定非得显示你正在捕捉的蜱虫。
看看下面这个xaml:
<Slider Orientation="Vertical" Height="200" Minimum="0" Maximum="10" Value="0" IsSnapToTickEnabled="True" TickFrequency="1" />
对于那些想要捕捉特定位置的人,也可以使用Ticks
属性:
<Slider Minimum="1" Maximum="500" IsSnapToTickEnabled="True" Ticks="1,100,200,350,500" />
快照技巧非常方便,但有一定的局限性,例如,如果您只想显示有效滴答的子集。 我有两个select成功:绑定到一个整数或四舍五入的新值。 这是一个结合的例子:
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"/>
我不知道如何比较快速的performance,但我没有任何麻烦*。
*如果您还将滑块的值绑定到文本字段的types,则您将经历一段时间,如果使用鼠标,文本字段将显示小数。 如果你还绑定到一个int在同一时间,空string将导致转换exception被抛出,暂时陷入用户界面。 这些问题还不够严重,我找不到解决办法。