C# 如何使OnRender()在控件上方而不是下方绘制?

C# 如何使OnRender()在控件上方而不是下方绘制?,c#,wpf,C#,Wpf,我想用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,

我想用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);”?这对我来说没有任何改变

我不能使用文本装饰,因为即使没有文本,也必须画下划线

编辑:

可能不是一个很好的解决方案,但似乎没有更好的方法:
OnRender()方法绘制背景,然后绘制线条。TextBox Background属性设置为null,因此不会再次绘制背景

只是一个gess:在画线之前,您是否尝试调用base.OnRender()?

在这样的覆盖中,您最好始终保留base方法调用,就像您的情况一样

base.OnRender(dc);
如果删除它,则覆盖必须绘制/渲染所有内容,而基类不会渲染任何内容。当然,这通常取决于使用模式和场景,但通常删除它是危险的

编辑:至于你的问题,覆盖/自定义WPF文本框的呈现行为似乎并不容易,我发现了这个问题:


是的,正如我所说,它什么也不做。不管我把它放在哪里。谢谢,我会尽快查看你的链接。Wordpress在工作时被阻止。