如何捕捉WPF滑块上的值,但只显示其中一些值的勾号

时间:2010-01-28 19:16:01

标签: wpf slider

我有一个WPF滑块,其最小值= 0,最大值= 50.我想以间隔5显示刻度,但是滑块以1的间隔拍摄。这是否可能?

4 个答案:

答案 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;