如何让OnRender()在控件之上绘制,而不是在下面?

时间:2011-09-14 10:11:33

标签: 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, Height - 4));
}

顺便说一下,为什么每个人都使用“base.OnRender(drawingContext);”在他们的OnRender()方法?它对我没有任何改变。

我无法使用TextDecoration,因为即使没有文本也必须绘制下划线。

编辑:

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

2 个答案:

答案 0 :(得分:0)

只是一个gess:你在绘制线之前是否尝试调用base.OnRender()?

答案 1 :(得分:0)

在覆盖中,你最好总是留下基本方法调用,就像你的情况一样

base.OnRender(dc);

如果你删除它,你的覆盖必须绘制/渲染一切,基类不会渲染任何东西。一般来说,取决于使用模式和场景,但通常会删除它是危险的。

编辑:至于你的问题,覆盖/自定义WPF TextBox的渲染行为似乎并不容易,我找到了这个:

Customizing WPF TextBox Not Easy, But Possible