Когда все ваши попытки по этой теме потерпели неудачу:
https://social.msdn.microsoft.com/Forums/vstudio/en-US/8d64b2dc-4dfd-4b05-aa95-e24aaaed53af/i-want-to-add-lables-with-text-in-ticks-of-slider?forum=wpf
У меня есть быстрое и грязное решение для вас: поместите ваш слайдер в сетку и в следующем ряду (для горизонтального слайдера это будет столбец для вертикального слайдера) поместите достаточно столбцов (или рядов для вертикального слайдера) для размещения ваших меток, например:
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="*" />
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="*" />
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="*" />
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="*" />
<ColumnDefinition Width="Auto" />
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<Slider Grid.ColumnSpan="9" Minimum="0" Maximum="100" Ticks="0, 25, 50, 75, 100" IsSnapToTickEnabled="True" Margin="3" />
<Label Content="Failed" Grid.Row="1" Style="{StaticResource TickLabel}" />
<Label Content="Below average" Grid.Row="1" Grid.Column="2" Style="{StaticResource TickLabel}" />
<Label Content="Average" Grid.Row="1" Grid.Column="4" Style="{StaticResource TickLabel}" />
<Label Content="Above average" Grid.Row="1" Grid.Column="6" Style="{StaticResource TickLabel}" />
<Label Content="Perfect" Grid.Row="1" Grid.Column="8" Style="{StaticResource TickLabel}" />
</Grid>
И для стиля метки :
<UserControl.Resources>
<Style TargetType="Label" x:Key="TickLabel">
<Style.Setters>
<Setter Property="LayoutTransform">
<Setter.Value>
<RotateTransform Angle="-90" />
</Setter.Value>
</Setter>
<Setter Property="Margin" Value="-3" />
<Setter Property="HorizontalContentAlignment" Value="Right" />
</Style.Setters>
</Style>
</UserControl.Resources>
Если вам нужно больше таких и с разными метками / размещением меток, я бы создал пользовательский элемент управления, где содержимое меток (и их положение) задается как Dictionary<double, string>
, где позиция находится в диапазоне от 0,0 до 1,0 (процент от полного диапазона ползунка).