如何在WPF Tickbar上使用字符串值代替刻度?

Ash*_*non 10 .net wpf slider wpf-controls

我希望自定义基本WPF的外观TickBar.我想知道是否有一种简单的方法可以使用控件模板:

我希望用数字代替刻度线上的刻度.我希望数字的位置对应于滑块的​​值(很像链接中的图片).

我已经搜索了一个建议,我发现创建了一个继承自TickBar并覆盖它的OnRender方法的类.

我更愿意找到一个不涉及这个问题的解决方案.我真的希望使用控件模板来做到这一点.所以,如果有一个这样的解决方案,建议将不胜感激!:)

Ash*_*non 16

好的,我有一个解决方案.我想我应该回答我的问题,因为沿线的其他一些人遇到了与我相同的情况.:-)

覆盖OnRender似乎是最明显的解决方案.我真的希望使用各种各样的模板...... 叹息 ......好啊.无论如何,我在MSDN的论坛上遇到了这个讨论,它提供了一个答案,让我朝着正确的方向前进.

简单,它需要一些tweeks来使它更灵活,所以这是我的版本:

class CustomTickBar : TickBar
{
    protected override void OnRender(System.Windows.Media.DrawingContext dc)
    {
        double num = this.Maximum - this.Minimum;
        double y = this.ReservedSpace * 0.5;
        FormattedText formattedText = null;
        double x = 0;
        for(double i = 0; i <= num; i += this.TickFrequency)
        {
            formattedText = new FormattedText(i.ToString(), FlowDirection.LeftToRight, 
                new Typeface("Verdana"), 8, Brushes.Black);
            if(this.Minimum == i)
                x = 0;
            else
                x += this.ActualWidth / (num / this.TickFrequency) ;
            dc.DrawText(formattedText, new Point(x, 10)); 
        }
    }
}
Run Code Online (Sandbox Code Playgroud)