Я считаю, что лучший способ сделать это - создать собственный элемент управления TickBar и переопределить рендеринг тиков. Вот один из способов:
public class NumberedTickBar : TickBar
{
protected override void OnRender(DrawingContext dc)
{
Size size = new Size(base.ActualWidth,base.ActualHeight);
int tickCount = (int)((this.Maximum - this.Minimum) / this.TickFrequency) + 1;
if((this.Maximum - this.Minimum) % this.TickFrequency == 0)
tickCount -= 1;
Double tickFrequencySize;
// Calculate tick's setting
tickFrequencySize = (size.Width * this.TickFrequency / (this.Maximum - this.Minimum));
string text = "";
FormattedText formattedText = null;
double num = this.Maximum - this.Minimum;
int i = 0;
// Draw each tick text
for(i = 0;i <= tickCount;i++)
{
text = Convert.ToString(Convert.ToInt32(this.Minimum + this.TickFrequency * i),10);
formattedText = new FormattedText(text,CultureInfo.GetCultureInfo("en-us"),FlowDirection.LeftToRight,new Typeface("Verdana"),8,Brushes.Black);
dc.DrawText(formattedText,new Point((tickFrequencySize * i),30));
}
}
}
Затем вам нужно будет создать собственный стиль для вашего слайдера, который будет использовать новую панель тиканов вместо панели тикеров по умолчанию.
Если вы не уверены, как создать стиль для слайдера, вы можете начать с примера Windows здесь. Это очень сложный.
Тогда единственное, что осталось сделать, - это заменить Верхнюю панель тиканков на новую.
В основном изменить:
<TickBar Name="TopTick" SnapsToDevicePixels="True" Placement="Top" Fill="{StaticResource GlyphBrush}" Height="4" Visibility="Collapsed" />
к этому:
<local:NumberedTickBar Name="TopTick" Margin="5,0,10,0" SnapsToDevicePixels="True" Grid.Row="0" Fill="{TemplateBinding Foreground}" Placement="Top" Height="4" Visibility="Collapsed"/>
Поле важно, потому что это гарантирует, что ваш текст находится в нужном месте.
Ваш слайдер будет сверху, а галочки чуть ниже. Под галочками будет отображаться строка текста.