如何使OnRender()在控件上方绘制而非下方?

4

我想使用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));
}

顺便问一下,为什么每个人在他们的OnRender()方法中使用“base.OnRender(drawingContext);”?这对我没有任何改变。
我不能使用TextDecoration,因为即使没有文本也必须绘制下划线。
编辑:
可能不是一个很好的解决方案,但似乎没有更好的方法: OnRender()方法先绘制背景,然后绘制线条。TextBox的Background属性设置为null,这样就不会再次绘制背景了。
2个回答

0
在这种覆盖的情况下,最好总是保留基本方法调用,就像您的情况一样。
base.OnRender(dc);

如果你移除它,你的覆盖方法就必须绘制/渲染所有内容,而基类将不会渲染任何东西。当然,一般情况下取决于使用模式和场景,但通常情况下移除它是危险的。

编辑:至于你的问题,似乎很难重写/自定义 WPF TextBox 的渲染行为,我找到了这个链接:

Customizing WPF TextBox Not Easy, But Possible


谢谢,我会尽快查看您的链接。工作中无法访问WordPress。 - Markus

0
只是猜测:在绘制线条之前,您是否尝试调用base.OnRender()?

1
是的,正如我所说,它什么也不做。无论我把它放在哪里。 - Markus

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接