首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >WPF控件OnRender重写

WPF控件OnRender重写
EN

Stack Overflow用户
提问于 2014-02-26 17:00:09
回答 1查看 8.7K关注 0票数 1

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

下面是我得到的简单类:

代码语言:javascript
复制
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中声明了这个类:

代码语言:javascript
复制
<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打过一次电话。我漏掉了什么?在其他控件上进行自定义绘制的最佳选择是什么?

EN

回答 1

Stack Overflow用户

发布于 2014-02-26 18:13:29

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

代码语言:javascript
复制
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);
    }
}
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22036332

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档