WPF的画图
关于WPF的画面先上两张重要的图--网的来源的


- 1.继承UIElement,重写OnRender方法
- 2、Shapes 图形 组成
- 3.DrawingVisual 轻量级绘图,只提供显示和测试点击功能,DrawingVisual继承自ContainerVisual,所以其也是Visual集合容器
WPF中用于绘图的类主要有三个,分别是Shape类、Drawing类和DrawingVisual类,Shape类存在于System.Windows.Shapes命,而Drawing类和DrawingVisual类则都存在于 System.Windows.Media名字空间,下面简要介绍一下三个类的区别:
Shape类:
Shape继承自FrameworkElement,FrameworkElement继承自UIElement,包含在System.Windows.Shapes命名空间中,而WPF大部分控件均继承自System.Windows.Shapes类,因此,也可以将Shape及其继承类看成是特殊的图形控件,具有大多数控件通用的属性和事件,如果创建图元规模较小的程序,采用Shape应该是比较好的选择。Shape类派生情况如下:
| 类名 | 说明 |
|---|---|
| System.Windows.Shapes.Ellipse | 椭圆 |
| System.Windows.Shapes.Line | 直线 |
| System.Windows.Shapes.Path | 路径,可以组合成其他形状,功能最强大的绘图类 |
| System.Windows.Shapes.Polygon | 多边形 |
| System.Windows.Shapes.Polyline | 多段线 |
| System.Windows.Shapes.Rectangle | 矩形 |
Drawing类:
Drawing 对象是轻量级对象,可用于向应用程序添加几何形状、图像、文本和媒体。 Drawing 对象被视为轻量级,因为它们不支持 布局、 输入概述和焦点。 由于其性能优势,绘图非常适合背景和剪贴画。 在级别编程 Visual 时,还可以使用绘图。
Drawing类继承自 Animatable,根源来自Freezable类,与Animation类有着千丝万缕的联系,与Shape类和DrawingVisual类根源均继承自Visual类存在较大区别,它的开销介于Shape类和DrawingVisual类之间,如果需要创建频繁修改的图元对象时,可以采用Drawing类。Drawing类派生类如下:
| 名称 | 说明 |
|---|---|
System.Windows.Media.DrawingGroup |
表示可以作为单个绘图进行运算的绘图集合。 |
System.Windows.Media.GeometryDrawing |
使用指定的 Brush 和 Pen 绘制 Geometry。 |
System.Windows.Media.GlyphRunDrawing |
表示一个呈现 GlyphRun 的 Drawing 对象。 |
System.Windows.Media.ImageDrawing |
在由 Rect 定义的区域内绘制图像。 |
System.Windows.Media.VideoDrawing |
播放媒体文件。如果媒体为视频文件,则 VideoDrawing 会将其绘制到指定的矩形中。 |
DrawingVisual
DrawingVisual类号称是WFP中最轻量级的绘图类,继承自ContainerVisual,ContainerVisual又继承自Visual(Visual有以下能力:输出显示、坐标变换、区域剪裁、命中测试、边框计算。)
DrawingVisual是一种可视对象,可用于在屏幕上呈现矢量图形,它显示的内容由系统持久化。
为了使用DrawingVisual对象,您需要为对象创建一个宿主容器。宿主容器对象必须派生自FrameworkElement类,该类提供了DrawingVisual类不支持的布局和事件处理支持。宿主容器对象不显示任何可视属性,因为它的主要目的是包含子对象。
在 System.Windows.Media名字空间中,如果要编制涉及数千个图元的创建和编辑的应用程序,建议采用DrawingVisual类,但同时由于DrawingVisual不支持任何事件,若需要对图元进行编辑,最好编写继承自DrawingVisual自定义图元。DrawingVisual类没有派生对象,绘图是通过DrawingContext类进行的,DrawingContext类继承自System.Windows.Threading.DispatcherObject,属于比较基础的类,与WPF实现机制有较大关系,该类只有Dispatcher 1个属性,其他的都是方法,大部分以Draw开头,如下:
| 名称 | 说明 |
|---|---|
| DrawDrawing | 绘制指定的Drawing 对象 |
| DrawEllipse | 使用指定的 Brush和 Pen 绘制一个椭圆 |
| DrawGeometry | 使用指定的Brush和Pen绘制指定的Geometry |
| DrawLine | 使用指定的 Pen 在两个指定的点之间绘制一条线 |
| DrawRectangle | 使用指定的Brush和 Pen 绘制一个矩形。pen和brush都可以为nu11 |
| DrawText | 在指定位置绘制格式化文本 |

浙公网安备 33010602011771号