Как использовать строковые значения вместо тиков в WPF Tickbar?

Я хочу настроить внешний вид основного WPF TickBar . Мне было интересно, есть ли простой способ сделать это, используя шаблон управления:

Я хотел бы иметь числа вместо галочек вдоль тикбара. Я хочу, чтобы положение числа соответствовало значению слайдера (очень похоже на изображение в ссылке).

Я искал и нашел одно предложение о создании класса, который наследует от TickBar и переопределяет его ' s Метод OnRender .

Я бы предпочел найти решение, которое не включает это. Я действительно надеялся, что использование шаблона управления поможет. Так что, если есть одно такое решение, предложения будут с благодарностью! :)

10
задан Infinite Recursion 18 June 2014 в 15:36
поделиться

2 ответа

Хорошо, у меня есть решение.Я решил, что должен ответить на свой вопрос на тот случай, если кто-то из участников окажется в той же ситуации, что и я. :-)

Override OnRender кажется наиболее очевидным решением. Я действительно надеялся использовать своего рода шаблон... вздох ...ну ладно. В любом случае, я наткнулся на эту дискуссию на форумах MSDN, которая дала ответ, который направил меня в правильном направлении.

Просто, и требуется несколько настроек, чтобы сделать его более гибким, так что вот моя версия:

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)); 
        }
    }
}
16
ответ дан 3 December 2019 в 21:19
поделиться

Вот 2 быстрых и простых решения, которые работают, но не должны рассматриваться как лучшие практики:

Очень быстрое решение – установить для свойства AutoToolTipPlacemant ползунка значение TopRight. Это означает, что числа будут отображаться во всплывающей подсказке при перетаскивании ползунка.

Вариант 2 — отредактировать копию шаблона элемента управленияalt text

и просто создать несколько TextBlock с вашими значениями. используйте специальный ползунок один раз. Также числа не будут обновляться, если вы измените свойства Максимум и Минимум на ползунке.

Есть правильный способ решить эту проблему, но если вам нужно сделать это быстро и вы не можете начать переопределять OnRender или создавать совершенно новый элемент управления, эти способы сделают работу быстрее.

(автор этого сообщения с ответом никоим образом не одобряет неряшливые методы кодирования и не использует эти методы в качестве замены правильного способа сделать это в своем программном обеспечении: это просто быстрые исправления) :-)

1
ответ дан 3 December 2019 в 21:19
поделиться
Другие вопросы по тегам:

Похожие вопросы: