zoukankan      html  css  js  c++  java
  • 在WPF中自定义你的绘制(一)

                                              在WPF中自定义你的绘制(一)
                                                                        周银辉

            在传统的Windows窗体编程中,如果我们需要打造一些比较个性化的控件,那么我们常常需要自定义控件的绘制(重写OnPaint等),即需要经常用到Graphics对象。而在WPF中,我们可以使用Xaml轻松编写出很有特色的界面元素,似乎与以前的以前利用Graphics对象手写代码绘制控件的日子越来越远了。其实在WPF中,如果我们需要低级别的自定义绘制同样是可以的,那么我们就需要一个名DrawingContext的类。与OnPaint方法相对应的是OnRender方法(当然,你也可以在其他地方进行绘制)。
            在UIElement.OnRender( DrawingContext drawingContext )方法中,直接提供了DrawingContext 对象,我们可以利用它像以前的Graphics对象一样进行各式各样的绘制操作,值得注意的是一下几点:
            1,在我们的代码中,我们不能直接调用OnRender方法,它将被系统异步调用进行布局和绘制(这与Win32不同)。
            2,我们不能直接创建DrawingContext实例,但我们可以利用 DrawingGroup.Open 和DrawingVisual.RenderOpen来得到。    
            3,我们的绘制不是实时的,事实上我们的绘制将被保存到一个绘制指令集中被图形 系统在某个时候调用。   

    参考如下代码,我们重新定义的一个Canvas的绘制:
    using System;
    using System.Collections.Generic;
    using System.Text;
    using System.Windows.Controls;
    using System.Windows.Media;
    using System.Windows;
    using System.Globalization;

    namespace CustomPaint
    {
        
    class MyCanvas : Canvas
        
    {
            
    protected override void OnRender(DrawingContext dc)
            
    {
                
    base.OnRender(dc);

                dc.DrawRectangle(Brushes.LightBlue, 
    new Pen(Brushes.Red, 1), 
                    
    new Rect(new Point(1010), new Size(10050)));

                dc.DrawText(
    new FormattedText("my canvas", CultureInfo.CurrentCulture, 
                    FlowDirection.LeftToRight, 
    new Typeface("Tahoma"), 20, Brushes.Green),
                    
    new Point(50,25));
            }

        }

    }


    效果如下:
    customPaint1.png 

    在《在WPF中自定义你的绘制(二)》中我们将更深入地阐述在WPF中如何进行自定义绘制,谢谢。
  • 相关阅读:
    Linux下文件的三种时间标记:访问时间、修改时间、状态改动时间 (转载)
    linux下创建文件的文件权限问题
    linux下文件特殊权限设置位S和沾附位T(转载)
    c 不同类型的指针
    linux exit 和 _exit的区别
    (转)linux下错误的捕获:errno和strerror的使用,以及perror和strerror的区别
    (总结)Linux下su与su -命令的本质(转)
    linux切换shell
    mysql安装两个版本
    远程连接数据库 出现 Client does not support authentication protocol requested by server的解决方法
  • 原文地址:https://www.cnblogs.com/zhouyinhui/p/818801.html
Copyright © 2011-2022 走看看