在WPF中自定义你的绘制(一)
来源:互联网 发布:数据交换平台产品 编辑:程序博客网 时间:2024/06/06 13:23
在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的绘制:
效果如下:
在《在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(10, 10), new Size(100, 50)));
dc.DrawText(new FormattedText("my canvas", CultureInfo.CurrentCulture,
FlowDirection.LeftToRight, new Typeface("Tahoma"), 20, Brushes.Green),
new Point(50,25));
}
}
}
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(10, 10), new Size(100, 50)));
dc.DrawText(new FormattedText("my canvas", CultureInfo.CurrentCulture,
FlowDirection.LeftToRight, new Typeface("Tahoma"), 20, Brushes.Green),
new Point(50,25));
}
}
}
效果如下:
在《在WPF中自定义你的绘制(二)》中我们将更深入地阐述在WPF中如何进行自定义绘制,谢谢。
- 在WPF中自定义你的绘制(一)
- 在WPF中自定义你的绘制(一)
- 在WPF中自定义你的绘制(五)
- 在WPF中自定义你的绘制(四)
- 在WPF中自定义你的绘制(三)
- 在WPF中自定义你的绘制(二)
- 在WPF中自定义你的绘制(五)
- 在WPF中自定义你的绘制(四)
- 在WPF中自定义你的绘制(三)
- 在WPF中自定义你的绘制(二)
- 绘制自定义符号一(在ArcMap中编辑自定义符号)
- WPF 自定义的图表(适用大量数据绘制)
- WPF 自定义的图表(适用大量数据绘制)下
- 在WPF中自定义控件
- 在WPF中自定义控件
- WPF绘制自定义窗口
- WPF绘制自定义窗口
- WPF绘制自定义窗口
- WPF中的PathAnimation(路径动画)
- 在WPF中自定义你的绘制(五)
- 在WPF中自定义你的绘制(四)
- 在WPF中自定义你的绘制(三)
- 在WPF中自定义你的绘制(二)
- 在WPF中自定义你的绘制(一)
- 扩展 WPF 动画类
- WPF中的MatrixTransform
- 一头雾水的"Follow The Pointer"
- WPF中,如何将Vista Aero效果扩展到整个窗口
- Microsoft Surface
- 参加BEA Dev2Dev TechDays 归来
- 用WPF创建3D Content
- 使用桌面窗口管理器创建Aero玻璃效果
原创粉丝点击
热门IT博客
热门问题
老师的惩罚
人脸识别
我在镇武司摸鱼那些年
重生之率土为王
我在大康的咸鱼生活
盘龙之生命进化
天生仙种
凡人之先天五行
春回大明朝
姑娘不必设防,我是瞎子
狗狗吃草呕吐怎么办
鱼吃石头了怎么办
吸入露水气感冒怎么办
小猫得了猫癣怎么办
手机一直重启怎么办
手机文件删不了怎么办
考试科目二紧张怎么办
科目二系统误判怎么办
晚上练车看不清怎么办
一辆车扣了50分怎么办
驾校教练喜欢我怎么办
和驾校教练暧昧怎么办
学车教练骂人怎么办
手机连不上网怎么办
打印机连不上网怎么办
吃滋补中药上火怎么办
吃补肾药上火怎么办
胃肠型感冒发烧怎么办
小儿胃肠型感冒怎么办
孕妇肚子胀气便秘怎么办
染发半个月怀孕怎么办
小儿舌苔厚白怎么办
朝阳公园年卡怎么办
鼻炎引起的头痛怎么办
鼻炎头痛怎么办小偏方
鼻塞引起的头痛怎么办
小孩喝牛奶上火怎么办
煎汤药地榆炭怎么办
头部受风头痛怎么办
头部受风了怎么办
受凉引起的头疼怎么办
脑袋受风了怎么办
孕妇吃了川芎怎么办
交强险标贴丢了怎么办
交强险单子丢了怎么办
包扣子坏了怎么办
包包的五金掉色怎么办
金链子断了怎么办
包包链子生锈了怎么办
包包扣子生锈了怎么办
被液氮冻伤起泡怎么办