我有一个WPF滑块,其最小值= 0,最大值= 50.我想以间隔5显示刻度,但是滑块以1的间隔拍摄。这是否可能?
答案 0 :(得分:10)
属性Interval
不会影响此行为。
使用此:
<Slider TickFrequency="5" IsSnapToTickEnabled="True" />
答案 1 :(得分:5)
<Slider TickPlacement="TopLeft" Minimum="0" Maximum="50" TickFrequency="5" IsSnapToTickEnabled="False" SmallChange="1" />
禁用捕捉到IsSnapToTickEnabled="False"
的刻度并设置SmallChange="1"
。
SmallChange确定拖动拇指或按箭头键时的增量。当用户单击滑块(而不是拇指)时,您还可以控制增量。要使拇指跳跃,请使用LargeChange="10"
跳跃10个单位。要使滑块移动到用户单击的位置,请使用IsMoveToPointEnabled="True"
。注意,IsMoveToPointEnabled会将拇指放在最近的SmallChange增量处。
答案 2 :(得分:3)
正常的WPF Slider
只能绘制所有刻度线,或者根本不绘制任何刻度线
要解决此限制,您可以创建自己的Slider
,也可以使用技巧:禁用Slider
的{{1}}并自行绘制。
TickBar
<StackPanel>
<TickBar Maximum="{Binding Path=Maximum, ElementName=MySlider}"
Minimum="{Binding Path=Minimum, ElementName=MySlider}" TickFrequency="5" Height="4"
Fill="Black" ReservedSpace="11" />
<Slider Name="MySlider" Maximum="50" TickPlacement="None" IsSnapToTickEnabled="True" />
</StackPanel>
是最外面的刻度线左右两侧的组合空间,与ReservedSpace
的宽度完全相同。它通常是11像素。如果您使用不寻常的主题或以其他方式混淆,则必须在新的Thumb
中进行调整。
这个解决方案有一个缺点:TickBar
不会尖,因为Thumb
认为他没有刻度线。如果你希望Slider
是尖头的,你必须通过给Thumb
来欺骗Slider
,然后再将其折叠:
TickBar
然后在<StackPanel>
<TickBar Maximum="{Binding Path=Maximum, ElementName=MySlider2}"
Minimum="{Binding Path=Minimum, ElementName=MySlider2}" TickFrequency="5"
Height="4" Fill="Black" ReservedSpace="11" />
<Slider Name="MySlider2" Maximum="50" TickPlacement="TopLeft"
IsSnapToTickEnabled="True"/>
</StackPanel>
的构造函数中(Window
之后):
InitializeComponent()
答案 3 :(得分:1)
我通过设置Ticks属性只显示我想要的刻度,将IsSnapToTickEnabled设置为false并在滑块值的绑定中使用舍入来解决了同样的问题。在我的例子中,我想显示0到100%的滑块,以5%的增量显示刻度,并将步骤显示为1%。
XAML:
<Slider Minimum="0" Maximum="100"
TickPlacement="BottomRight" Ticks="{Binding PercentTicks}"
TickFrequency="1" SmallChange="1" LargeChange="5"
Value="{Binding MyProperty, Converter={StaticResource PercentageConverter}}" />
视图模型:
public double MyProperty
{
get { return myProperty; }
set
{
myProperty = Math.Round(value, 2);
OnPropertyChanged();
}
}
myProperty的值从0到1,因此舍入到2位数恰好为1%! 将刻度设置为5%的增量是在视图模型的构造函数中完成的:
var ticks = new DoubleCollection();
for (int i = 0; i <= 100; i+=5)
{
ticks.Add(i);
}
PercentTicks = ticks;