博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
在WPF中自定义你的绘制(一)
阅读量:4972 次
发布时间:2019-06-12

本文共 1348 字,大约阅读时间需要 4 分钟。

原文:

                                          在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的绘制:

None.gif
using
 System;
None.gif
using
 System.Collections.Generic;
None.gif
using
 System.Text;
None.gif
using
 System.Windows.Controls;
None.gif
using
 System.Windows.Media;
None.gif
using
 System.Windows;
None.gif
using
 System.Globalization;
None.gif
None.gif
namespace
 CustomPaint
ExpandedBlockStart.gifContractedBlock.gif
dot.gif
{
InBlock.gif    
class MyCanvas : Canvas
ExpandedSubBlockStart.gifContractedSubBlock.gif    
dot.gif{
InBlock.gif        
protected override void OnRender(DrawingContext dc)
ExpandedSubBlockStart.gifContractedSubBlock.gif        
dot.gif{
InBlock.gif            
base.OnRender(dc);
InBlock.gif
InBlock.gif            dc.DrawRectangle(Brushes.LightBlue, 
new Pen(Brushes.Red, 1), 
InBlock.gif                
new Rect(new Point(1010), new Size(10050)));
InBlock.gif
InBlock.gif            dc.DrawText(
new FormattedText("my canvas", CultureInfo.CurrentCulture, 
InBlock.gif                FlowDirection.LeftToRight, 
new Typeface("Tahoma"), 20, Brushes.Green),
InBlock.gif                
new Point(50,25));
ExpandedSubBlockEnd.gif        }
ExpandedSubBlockEnd.gif    }
ExpandedBlockEnd.gif}
None.gif
效果如下:
customPaint1.png 
在《在WPF中自定义你的绘制(二)》中我们将更深入地阐述在WPF中如何进行自定义绘制,谢谢。
posted on
2015-11-05 14:48 阅读(
...) 评论(
...)

转载于:https://www.cnblogs.com/lonelyxmas/p/4939512.html

你可能感兴趣的文章
BZOJ 1529 [POI2005]ska Piggy banks:并查集
查看>>
java多态与异常处理——动手动脑
查看>>
软件测试技术HW03-printPrimes()
查看>>
SQL Server2008附加数据库之后显示为只读时解决方法
查看>>
linux vi编辑
查看>>
IO流--复制picture ,mp3
查看>>
linux 环境变量
查看>>
JQuery UI datepicker 使用方法
查看>>
转:网页启用Gzip压缩 提高浏览速度
查看>>
poj 3321(树状数组)
查看>>
《Java程序设计》第六周学习总结
查看>>
Linux正则表达式
查看>>
Mysql tinyint长度为1时在java中被转化成boolean型
查看>>
【刷题】BZOJ 3930 [CQOI2015]选数
查看>>
SQL分页排序的实现与分页数据重复问题——以Oracle rownum为例
查看>>
nagios 自定义插件demo
查看>>
Azure 基础 : 使用 Automation 定时开机
查看>>
使用Vim normal 命令 修改可视块区域
查看>>
详细分享UICollectionView的自定义布局(瀑布流, 线性, 圆形...)
查看>>
visio的一些有用的方法
查看>>