我经常想要一个类似于System.Windows.Forms.TrackBar的WPF滑块。也就是说,我想要一个从X到Y的滑块,但只允许用户将其移动到离散的整数位置。如何使WPF滑块仅捕捉到离散整数位置?
因为Slider上的Value属性是双重的,所以在WPF中如何做到这一点?
我经常想要一个类似于System.Windows.Forms.TrackBar的WPF滑块。也就是说,我想要一个从X到Y的滑块,但只允许用户将其移动到离散的整数位置。如何使WPF滑块仅捕捉到离散整数位置?
因为Slider上的Value属性是双重的,所以在WPF中如何做到这一点?
如果你以正确的方式设置你的刻度线,你可以使用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" />
的捕捉技巧是方便,但也有局限性,例如,如果你想只显示一个子集的有效滴答。我已经成功了两种选择:绑定到一个整数或围绕新值。这里是一个组合例:
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,则空字符串将导致一个转换异常被抛出,导致用户界面暂时陷入困境。这些问题对于我来说寻找解决方案来说还不够严重。
这个答案应该是可以接受的。奇迹般有效。谢谢 – Ashbay 2013-09-26 14:48:45
谢谢@Ashbay ......当时,我想给其他人信任答案......而不仅仅是将自己的答案标记为已接受。 – cplotts 2013-09-26 17:28:30