【问题标题】:How to make OnRender() draw above the control, not below?如何使 OnRender() 在控件上方而不是下方绘制?
【发布时间】:2011-09-14 10:11:32
【问题描述】:

我想使用 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,因此不会再次绘制背景。

【问题讨论】:

    标签: c# wpf


    【解决方案1】:

    只是一个问题:你在画线之前尝试过调用 base.OnRender() 吗?

    【讨论】:

    • 是的,正如我所说,它什么也没做。不管我把它放在哪里。
    【解决方案2】:

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

    base.OnRender(dc);
    

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

    编辑: 至于你的问题,重写/自定义 WPF TextBox 的呈现行为似乎并不容易,我找到了这个:

    Customizing WPF TextBox Not Easy, But Possible

    【讨论】:

    • 谢谢,我会尽快查看您的链接。 Wordpress 在工作中被阻止。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-08-02
    • 1970-01-01
    • 1970-01-01
    • 2013-04-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多