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中如何进行自定义绘制,谢谢。
  • 相关阅读:
    Android textAppearance的属性设置及TextView属性详解
    Eclipse Hot Keys
    面向对象(一)
    Java基础知识(下)
    code2uml使用教程
    AndroidDevTools简介
    idea2020.3 安装插件JetBrains 插件市场安装 Cloud Toolkit
    在 Mac 上撰写和格式化备忘录-添加提醒-添加日历
    macbook-键盘连击问题002
    创业团队建设与管理
  • 原文地址:https://www.cnblogs.com/zhouyinhui/p/818801.html
Copyright © 2011-2022 走看看