WPF类似于WINFORM的Onpaint

本文探讨了在WPF中如何通过OnRender方法实现低级别的自定义绘制,与WinForm中的OnPaint类似,但区别在于异步调用和DrawingContext的使用。通过CustomCanvas示例,学习如何利用DrawingContext进行图形绘制和文本显示。
摘要由CSDN通过智能技术生成

在WinForm中,要是想自定义一些控件,就需要重写控件的On_Paint属性,例如我写的冰墩墩,就是利用控件的On_Paint属性重新绘制的。

但是在WPF中,可以通过Xaml编写出很多特色的控件,例如geometry,pathgeometry。似乎不在需要这种重新绘制控件的操作了。其实在WPF中,如果我们需要低级别的自定义绘制同样是可以的,那么我们就需要一个名DrawingContext的类。与OnPaint方法相对应的是OnRender方法(当然,你也可以在其他地方进行绘制)。
        在UIElement.OnRender( DrawingContext drawingContext )方法中,直接提供了DrawingContext 对象,我们可以利用它像以前的Graphics对象一样进行各式各样的绘制操作,值得注意的是一下几点:
        1,在我们的代码中,我们不能直接调用OnRender方法,它将被系统异步调用进行布局和绘制(这与Win32不同)。
        2,我们不能直接创建DrawingContext实例,但我们可以利用 DrawingGroup.Open 和DrawingVisual.RenderOpen来得到。    
        3,我们的绘制不是实时的,事实上我们的绘制将被保存到一个绘制指令集中被图形 系统在某个时候调用。   

 

 public class CustomCanvas:Canvas
    {
        protected override void OnRender(DrawingContext drawingContext)
        {
            base.OnRender(drawingContext);
            drawingContext.DrawRectangle(Brushes.LightBlue, new Pen(Brushes.Red, 1),
                new Rect(new Point(100, 10), new Size(100, 50)));

            drawingContext.DrawText(new FormattedText("测试绘制", CultureInfo.CurrentCulture,
                FlowDirection.LeftToRight, new Typeface("Tahoma"), 20, Brushes.Green),
                new Point(50, 25));
        }
    }

 

 <Grid >
        <local:CustomCanvas></local:CustomCanvas>
    </Grid>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值