cpl*_*tts 111 wpf controls slider
我经常需要一个WPF滑块,其行为类似于旧的System.Windows.Forms.TrackBar.也就是说,我想要一个从X到Y的滑块,但只允许用户在离散的整数位置移动它.
如何在WPF中执行此操作,因为Slider上的Value属性是双倍的?
cpl*_*tts 166
简单的答案是您可以利用IsSnapToTickEnabled和TickFrequency属性.也就是说,将捕捉变为嘀嗒声并将嘀嗒声频率设置为1.
或者,换句话说......利用刻度......但你不一定要显示你正在捕捉的刻度线.
查看下面的xaml:
<Slider
Orientation="Vertical"
Height="200"
Minimum="0"
Maximum="10"
Value="0"
IsSnapToTickEnabled="True"
TickFrequency="1"
/>
Run Code Online (Sandbox Code Playgroud)
Dav*_*ave 45
对于那些想要捕捉到特定位置的人,您还可以使用该Ticks
属性:
<Slider Minimum="1" Maximum="500" IsSnapToTickEnabled="True" Ticks="1,100,200,350,500" />
Run Code Online (Sandbox Code Playgroud)
快照技巧很方便,但有限制,例如,如果您只想显示有效刻度的子集.我有两个选择成功:要么绑定整数,要么舍入新值.这是一个组合的例子:
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"/>
Run Code Online (Sandbox Code Playgroud)
我不知道两者的性能如何与快照技巧相比,但我没有遇到任何麻烦*.
*如果您还将滑块的值绑定到一种文本字段,您将体验到这一点,如果使用鼠标,每隔一段时间,文本字段将显示小数.如果您同时绑定到int,则空字符串将导致抛出转换异常,从而暂时阻塞UI.这些问题对我来说还不够严格,无法寻找解决方案.
归档时间: |
|
查看次数: |
82758 次 |
最近记录: |