Я хочу настроить внешний вид основного WPF TickBar
. Мне было интересно, есть ли простой способ сделать это, используя шаблон управления:
Я хотел бы иметь числа вместо галочек вдоль тикбара. Я хочу, чтобы положение числа соответствовало значению слайдера (очень похоже на изображение в ссылке).
Я искал и нашел одно предложение о создании класса, который наследует от TickBar
и переопределяет его ' s Метод OnRender
.
Я бы предпочел найти решение, которое не включает это. Я действительно надеялся, что использование шаблона управления поможет. Так что, если есть одно такое решение, предложения будут с благодарностью! :)
Хорошо, у меня есть решение.Я решил, что должен ответить на свой вопрос на тот случай, если кто-то из участников окажется в той же ситуации, что и я. :-)
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));
}
}
}
Вот 2 быстрых и простых решения, которые работают, но не должны рассматриваться как лучшие практики:
Очень быстрое решение – установить для свойства AutoToolTipPlacemant ползунка значение TopRight. Это означает, что числа будут отображаться во всплывающей подсказке при перетаскивании ползунка.
Вариант 2 — отредактировать копию шаблона элемента управления
и просто создать несколько TextBlock
с вашими значениями. используйте специальный ползунок один раз. Также числа не будут обновляться, если вы измените свойства Максимум и Минимум на ползунке.
Есть правильный способ решить эту проблему, но если вам нужно сделать это быстро и вы не можете начать переопределять OnRender или создавать совершенно новый элемент управления, эти способы сделают работу быстрее.
(автор этого сообщения с ответом никоим образом не одобряет неряшливые методы кодирования и не использует эти методы в качестве замены правильного способа сделать это в своем программном обеспечении: это просто быстрые исправления) :-)