为了测试如何在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甚至打过一次电话。我错过了什么?在其他控件之上进行自定义绘图的最佳选择是什么?
答案 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);
}
}