我想使用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,因此不会再次绘制背景。
答案 0 :(得分:0)
只是一个gess:你在绘制线之前是否尝试调用base.OnRender()?
答案 1 :(得分:0)
在覆盖中,你最好总是留下基本方法调用,就像你的情况一样
base.OnRender(dc);
如果你删除它,你的覆盖必须绘制/渲染一切,基类不会渲染任何东西。一般来说,取决于使用模式和场景,但通常会删除它是危险的。
编辑:至于你的问题,覆盖/自定义WPF TextBox的渲染行为似乎并不容易,我找到了这个: