在WPF滑块中隐藏最小值和最大值处的刻度线

5

我希望显示一个范围从0.5到1.5的滑动条,只有一个标记在1.0处标记中心和默认值。我已经定义了以下滑动条:

<Slider Minimum="0.5" Maximum="1.5"
        IsMoveToPointEnabled="True" IsSnapToTickEnabled="False"
        Orientation="Horizontal"
        Ticks="1.0"
        TickPlacement="BottomRight"
        Value="{Binding SomeProperty, Mode=TwoWay}"/>

然而,除了1.0处的勾号外,这个滑块还显示了0.5和1.5处的勾号,即最小值和最大值。

有没有办法隐藏这些最小/最大勾号?!我检查了所有属性并尝试更改其中一些属性,但迄今为止没有成功。

2个回答

4
一种方法是为滑块提供自己的ControlTemplate。如果查看默认的Slider ControlTemplate(可在MSDN上找到),您将看到TickBar类实现了Slider上的刻度线。
继承自TickBar类并覆盖其OnRender()方法将允许您以任何想要的方式绘制刻度线。您可以在这里发挥创意:例如编号的刻度线,不同的颜色/样式等...或者在您的情况下,只是不绘制最小/最大位置的刻度线。
然后用新的TickBar替换自定义Slider ControlTemplate中的默认TickBar,去掉最小/最大刻度线,然后就可以使用它了。
有关继承自TickBar的代码示例,请参阅以下内容: http://social.msdn.microsoft.com/forums/en-US/wpf/thread/6b926273-b0a1-43ab-be81-f2e9b42d701a 该网站介绍了显示编号刻度线的方法,但您应该能够从中学到所需的知识。

1
谢谢你的回答。我没有尝试过这个方法,但我认为它应该可以工作。然而,我正在寻找一个更简单的解决方案,比如设置一个属性。如果您提供了“Ticks”属性,但仍然在其他位置显示刻度标记,那么我认为这是不好的设计。更糟糕的是,您无法轻松地让它们消失。无论如何,我认为我将不得不坚持使用它,因为我不想/不能采取您描述的方式。我已经接受了您的答案,因为它可以解决问题。 - gehho

-1
请注意,您可以将 SliderForeground 画刷设置为 Transparent,这将使任何/所有刻度标记不可见。然后,您可以使用 Slider 外的元素/控件添加中心刻度(例如,在同一网格单元格中放置一个 Slider 和一个 Line 形状元素,并将 Line 元素居中对齐)。
虽然不太优雅,但具有易于实现的优点。

你可以将TickPlacement设置为“None”,以便根本不绘制任何刻度标记。 - Tim Pohlmann
问题是如何只保留一个勾选框,而不是全部删除。我的答案适用于那些不想使用控件模板的人,因为这超出了许多人的能力/兴趣水平。 - dapi
你的解决方案的第一步是去除所有的刻度。这可以通过将TickPlacement设置为“None”来轻松完成。 - Tim Pohlmann
我理解你的观点,但我认为将TickPlacement设置为None会禁用控件的刻度标记捕捉功能。最好保留并使用它。这可能是细枝末节,但我遇到过类似的情况。我的建议。 - dapi
1
那是不正确的。定位行为仅由 IsSnapToTickEnabled 控制。 - Tim Pohlmann

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接