经常情况下,我希望WPF滑块的行为方式与旧版的System.Windows.Forms.TrackBar相同。也就是说,我想要一个从X到Y的滑块,但只允许用户在离散的整数位置上移动它。
在WPF中,由于Slider的Value属性是double类型,那么如何实现这一点呢?
换句话说...利用刻度...但您不一定要显示要捕捉的刻度。
请查看以下 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" />
快照技巧很方便,但也有局限性,例如如果您只想显示有效刻度的子集,则无法做到。我已经尝试了两种替代方法:要么绑定为整数,要么四舍五入新值。这里是一个结合了两种方法的例子:
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"/>
我不知道两者的表现如何与捏合技巧相比,但我没有遇到任何问题*。