Как заставить OnRender () рисовать над элементом управления, а не под? - PullRequest
3 голосов
/ 14 сентября 2011

Я хочу рисовать подчеркивание в текстовых полях с помощью метода OnRender, но линия рисуется за текстовым полем. Текстовое поле непрозрачно, поэтому подчеркивание не будет видно. Как я могу нарисовать что-то над текстовым полем?

protected override void OnRender(DrawingContext dc){
    dc.DrawLine(new Pen(new LinearGradientBrush(Colors.Green, Colors.Blue, 0.0d), 2), new Point(0, Height - 4), new Point(Width, Height - 4));
}

Кстати, почему все используют "base.OnRender (drawingContext);" в их методах OnRender ()? Это ничего не меняет для меня.

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

Edit:

Не может быть красивым решением, но, похоже, нет лучшего способа: Метод OnRender () рисует фон, а затем линию. Свойство TextBox Background имеет значение null, поэтому фон больше не будет отрисовываться.

Ответы [ 2 ]

0 голосов
/ 14 сентября 2011

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

base.OnRender(dc);

, если вы удалите его, ваше переопределение должно отрисовать / отрендерить все, и базовый класс выиграл 'ничего не рендеришь.В целом, конечно, это зависит от шаблонов использования и сценариев, но в целом удаление его опасно.

Редактировать: Что касается вашего вопроса, кажется, что переопределить / настроить поведение рендеринга WPF TextBox нелегкоЯ нашел это:

Настройка WPF TextBox не просто, но возможно

0 голосов
/ 14 сентября 2011

Просто угадайте: вы пытались вызвать base.OnRender () перед рисованием вашей линии?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...