原文:
在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)); } }}
效果如下: 在《在WPF中自定义你的绘制(二)》中我们将更深入地阐述在WPF中如何进行自定义绘制,谢谢。 posted on 2015-11-05 14:48 阅读( ...) 评论( ...)