WPF控件OnRender覆盖

时间:2014-02-26 09:00:09

标签: c# wpf

为了测试如何在OnRender中的其他控件之上绘制,我已经基于TextBox创建了自己的控件,并决定覆盖它的OnRender方法。但似乎从未打过电话。

这是我所得到的简单课程:

public class MyTextBox : TextBox
{
    protected override void OnRender(System.Windows.Media.DrawingContext drawingContext)
    {
        Console.WriteLine("OnRender");
        //base.OnRender(drawingContext);
        Rect bounds = new Rect(0, 0, 100, 100);
        Brush brush = new SolidColorBrush(Colors.Yellow);
        drawingContext.DrawRectangle(brush, null, bounds);
    }
}

我在XAML中声明了这个类:

<local:MyTextBox Height="118" Margin="10,300,10,10" Text="TextBox" VerticalAlignment="Bottom" AcceptsReturn="True" Padding="0,0,200,0" FontSize="18" TextWrapping="Wrap" />

但是没有任何迹象表明OnRender甚至打过一次电话。我错过了什么?在其他控件之上进行自定义绘图的最佳选择是什么?

1 个答案:

答案 0 :(得分:2)

您应该覆盖默认的Textbox样式...

public class MyTextBox : TextBox
{

    public MyTextBox()
    {
        DefaultStyleKey = typeof (MyTextBox);
    }

    protected override void OnRender(System.Windows.Media.DrawingContext drawingContext)
    {
         Console.WriteLine("OnRender");
         //base.OnRender(drawingContext);
         Rect bounds = new Rect(0, 0, 100, 100);
         Brush brush = new SolidColorBrush(Colors.Yellow);
         drawingContext.DrawRectangle(brush, null, bounds);
    }
}