Обычный WPF Slider
может рисовать только все галочки или вообще не рисовать.
Чтобы обойти это ограничение, вы можете либо создать свой собственный Slider
, либо использовать трюк: отключите Slider
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
- это объединенное пространство слева и справа от большинства внешних отметок, которое точно равно ширине Thumb
. Обычно это 11 пикселей. Если вы используете необычную тему или возитесь с ней по-другому, вам придется настроить ее и в новом 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()
):
this.Loaded += (sender, e) =>
{
var sliderTickBar = (MySlider2.Template.FindName("TopTick", MySlider2) as
System.Windows.Controls.Primitives.TickBar);
sliderTickBar.Visibility = Visibility.Collapsed;
};