WPF基础之几何图形
之前的总结
01 WPF基础分享之布局
02 WPF基础之路由事件
03 WPF基础之内容控件
04 WPF基础之元素绑定
05 WPF基础之命令
06 WPF基础之资源
07 WPF基础之样式
08 WPF基础之形状画刷和变换
路径和几何图形
名称
|
说明 |
LineGeometry | 代表直线,该几何图形相当于Line形状。 |
RectangleGeometry | 代表矩形(可以具有圆形拐角),该几何图形相当于Rectangle形状。 |
EllipseGeometry | 代表椭圆,该图形相当于Ellipse形状。 |
GeometryGroup | 为单个路径添加任意多个Geometry对象,使用EvenOdd或NonZero填充规则来确定要填充的区域。 |
CombinedGeometry | 将两个几何图形合并为一个形状。可使用CombineMode属性选择如何组合两个几何图形。 |
PathGeometry | 代表更复杂的弧线、曲线以及直线构成的图形,并且既可以是闭合的,也可以是不闭合的。 |
StreamGeometry | 相当于PathGeometry的只读轻量级。StreamGeometry图形可节省内存,因为它不在内存中同时保存路径的所有分段。并且这类图形一旦被创建就不能再修改。 |
直线、矩形和椭圆图形
<Rectangle Width="100" Height="50" Fill="Yellow" Stroke="Blue"></Rectangle><Path Fill="Yellow" Stroke="Blue"><Path.Data><RectangleGeometry Rect="0,0 100,50"></RectangleGeometry></Path.Data></Path>
<Line Stroke="Blue" X1="0" Y1="0" X2="10" Y2="100"></Line><Path Stroke="Blue"><Path.Data><LineGeometry StartPoint="0,0" EndPoint="10,100"></LineGeometry></Path.Data></Path><Ellipse Fill="#0899FF" Height="50" Width="100" HorizontalAlignment="Left"></Ellipse><Path Fill="#0899FF"><Path.Data><EllipseGeometry RadiusX="50" RadiusY="25" Center="50,25"></EllipseGeometry></Path.Data></Path>
使用GeometryGroup组合形状
<Canvas><Path Fill="Yellow" Stroke="Blue" Margin="5" Canvas.Top="10" Canvas.Left="10"><Path.Data><GeometryGroup><RectangleGeometry Rect="0,0 100,100"></RectangleGeometry><EllipseGeometry Center="150,50" RadiusX="35" RadiusY="25"></EllipseGeometry></GeometryGroup></Path.Data></Path></Canvas>
![](/assets/blank.gif)
<Window.Resources><GeometryGroup x:Key="Geometry"><RectangleGeometry Rect="0,0 100,100"></RectangleGeometry><EllipseGeometry Center="50,50" RadiusX="35" RadiusY="25"></EllipseGeometry></GeometryGroup></Window.Resources><Canvas><TextBlock Canvas.Top="50" Canvas.Left="20" FontSize="25" FontWeight="Bold">Hello There</TextBlock><Path Fill="Yellow" Stroke="Blue" Margin="5" Canvas.Top="10" Canvas.Left="10" Data="{StaticResource Geometry}"></Path></Canvas>
![](/assets/blank.gif)
![](/assets/blank.gif)
使用CombinedGeometry融合几何图形
名称
|
说明
|
Union | 创建包含两个几何图形所有区域的形状。 |
Intersect | 创建包含两个几何图形共有区域的形状。 |
Xor | 创建包含两个几何图形非共有区域的形状。 |
Exclude | 创建的形状包含第一个几何图形的所有区域,但不包含第二个几何图形的区域。 |
<Canvas><Path Fill="Yellow" Stroke="Blue" Margin="5"><Path.Data><CombinedGeometry GeometryCombineMode="Union"><CombinedGeometry.Geometry1><RectangleGeometry Rect="0,0 100,100"></RectangleGeometry></CombinedGeometry.Geometry1><CombinedGeometry.Geometry2><EllipseGeometry Center="85,50" RadiusX="65" RadiusY="35"></EllipseGeometry></CombinedGeometry.Geometry2></CombinedGeometry></Path.Data></Path></Canvas>
![](/assets/blank.gif)
![](/assets/blank.gif)
![](/assets/blank.gif)
![](/assets/blank.gif)
<Canvas><Path Fill="Yellow" Stroke="Blue" Margin="5"><Path.Data><CombinedGeometry GeometryCombineMode="Union"><CombinedGeometry.Geometry1><CombinedGeometry GeometryCombineMode="Exclude"><CombinedGeometry.Geometry1><EllipseGeometry Center="50,50" RadiusX="50" RadiusY="50"></EllipseGeometry></CombinedGeometry.Geometry1><CombinedGeometry.Geometry2><EllipseGeometry Center="50,50" RadiusX="40" RadiusY="40"></EllipseGeometry></CombinedGeometry.Geometry2></CombinedGeometry></CombinedGeometry.Geometry1><CombinedGeometry.Geometry2><RectangleGeometry Rect="45,5 10,90"><RectangleGeometry.Transform><RotateTransform Angle="45" CenterX="50" CenterY="50"></RotateTransform></RectangleGeometry.Transform></RectangleGeometry></CombinedGeometry.Geometry2></CombinedGeometry></Path.Data></Path></Canvas>
![](/assets/blank.gif)
使用PathGeometry绘制曲线和直线
名称
|
说明
|
StartPoint | 指示从何处开始绘制图形的Point对象。 |
Segments | 用于绘制图形的PathSegment对象的集合。 |
IsClosed | 如果为True,WPF添加直线来连接起点和终点。 |
IsFilled | 如果为True,就使用Path.Fill画刷填充图形内部的区域。 |
名称
|
说明
|
LineSegment | 在两点之间创建直线。 |
ArcSegment | 在两点之间创建椭圆形直线。 |
BezierSegment | 在两点之间创建贝塞尔曲线。 |
QuadraticBezierSegment | 创建形式更简单的贝塞尔曲线,只有一个控制点而不是两个控制点,并且计算速度更快。 |
PolyLineSegment | 创建一系列直线。可使用多个LineSegment对象得到相同的结果,但使用单个PolyLineSegment对象更简明。 |
PolyBezierSegment | 创建一系列贝塞尔曲线。 |
PolyQuadraticBezierSegment | 创建一系列更简单的二次贝塞尔曲线。 |
直线
<Path Stroke="Blue"><Path.Data><PathGeometry><PathFigure IsClosed="True" StartPoint="10,100"><LineSegment Point="100,100"></LineSegment><LineSegment Point="100,50"></LineSegment></PathFigure></PathGeometry></Path.Data></Path>
![](/assets/blank.gif)
弧线
<Path Stroke="Blue"><Path.Data><PathGeometry><PathFigure IsClosed="False" StartPoint="10,100"><ArcSegment Point="250,150" Size="200,300"></ArcSegment></PathFigure></PathGeometry></Path.Data></Path>
![](/assets/blank.gif)
贝塞尔曲线
- 在起点,贝塞尔曲线和从第一个控制点到起点之间的直线相切,在终点,贝塞尔曲线和连接终点与最后一个点的直线相切(在中间是曲线)。
- 弯曲程度由两个控制点的距离决定。如果一个控制点更远,该控制点会更强的拉贝塞尔曲线。
<Canvas><Path Stroke="Blue" StrokeThickness="5" Canvas.Top="20"><Path.Data><PathGeometry><PathFigure StartPoint="10,10"><BezierSegment Point1="130,30" Point2="40,140" Point3="150,150"></BezierSegment> </PathFigure></PathGeometry></Path.Data></Path><Path Stroke="Green" StrokeThickness="2" StrokeDashArray="5, 2" Canvas.Top="20"><Path.Data><GeometryGroup><LineGeometry StartPoint="10,10" EndPoint="130,30"></LineGeometry><LineGeometry StartPoint="40,140" EndPoint="130,150"></LineGeometry></GeometryGroup></Path.Data> </Path><Path Fill="Red" Stroke="Red" StrokeThickness="8" Canvas.Top="20"><Path.Data><GeometryGroup><EllipseGeometry Center="130,30"></EllipseGeometry><EllipseGeometry Center="40,140"></EllipseGeometry></GeometryGroup></Path.Data></Path></Canvas>
![](/assets/blank.gif)
使用几何图形进行剪裁
<Window.Resources><GeometryGroup x:Key="clipGremetry" FillRule="Nonzero"><EllipseGeometry RadiusX="75" RadiusY="50" Center="100,150"></EllipseGeometry><EllipseGeometry RadiusX="100" RadiusY="25" Center="200,150"></EllipseGeometry><EllipseGeometry RadiusX="75" RadiusY="130" Center="140,140"></EllipseGeometry></GeometryGroup></Window.Resources><Grid><Grid.ColumnDefinitions><ColumnDefinition></ColumnDefinition><ColumnDefinition></ColumnDefinition></Grid.ColumnDefinitions><Button Clip="{StaticResource clipGremetry}"> A button</Button><Image Grid.Column="1" Clip="{StaticResource clipGremetry}" Stretch="None" Source="http://www.pptok.com/wp-content/uploads/2012/08/xunguang-4.jpg"></Image></Grid>
![](/assets/blank.gif)
转载于:https://www.cnblogs.com/lovezhangyu/p/10331012.html
WPF基础之几何图形相关推荐
- WPF入门(三)-几何图形之不规则图形(PathGeometry) (2)
WPF入门(三)->几何图形之不规则图形(PathGeometry) (2) 原文:WPF入门(三)->几何图形之不规则图形(PathGeometry) (2) 上一节我们介绍了PathG ...
- [WPF 基础知识系列] —— 绑定中的数据校验Vaildation
[WPF 基础知识系列] -- 绑定中的数据校验Vaildation 原文:[WPF 基础知识系列] -- 绑定中的数据校验Vaildation 前言: 只要是有表单存在,那么就有可能有对数据的校验需 ...
- WPF笔记(1.1 WPF基础)——Hello,WPF!
WPF笔记(1.1 WPF基础)--Hello,WPF! 原文:WPF笔记(1.1 WPF基础)--Hello,WPF! Example 1-1. Minimal C# WPF application ...
- 一起谈.NET技术,WPF 基础到企业应用系列5——WPF千年轮回2
一,摘要 首先很高兴这个系列能得到大家的关注和支持,前端时间身体状况不适,所以暂停了更新,对此表示非常抱歉,以后会逐渐加快进度,不过由于这是一个很长的系列,我也想把它写好,所以以后也会慢慢来,在这个系 ...
- WPF基础学习笔记(一)Dependency Object 和 Dependency Property
.依赖属性是WPF个人觉得对精彩和最有特色的部分.所以特地先拿出来. 首先要实现Dependency Property 则必须要继承Dependency Object.如果看下WPF的基础控件其实都间 ...
- WPF 基础到企业应用系列2——WPF前世今生
1.开篇前言 很多时候了解一项新技术的历史和趋势往往比这项技术的本身价值还要重要.WPF作为一项新技术(已经三年多了,或者应该叫老技术了),我们都有必要了解它的来龙去脉,尤其是公司的CTO ...
- WPF基础到企业应用系列8——依赖属性之“风云再起”
一. 摘要 首先圣殿骑士很高兴"WPF 基础到企业应用系列" 能得到大家的关注.支持和认可.看到很多朋友留言希望加快速度的问题,我会尽力的,对你们的热情关注也表示由衷的感谢.这段时 ...
- 小人快跑之WPF基础——图形与动画(一)
前言: 之前为了完成一些任务,因为公司只能限定一些网络访问且不能用存储设备进行拷贝,所以自己在家里写了一个demo就放到csdn的下载区回公司再下下来,令人意外的是这个非常小的demo居然两天里就有几 ...
- 小人快跑之WPF基础——图形与动画(二)
前言: 昨天说到了利用基于帧的动画来实现效果,这其实与WPF提供的图形与动画功能没有太大关系,在这里我们还是要关注一下WPF为我们提供的高级方法来解决问题. 本次主题将简述WPF中有关"图形 ...
最新文章
- 如何设置GridView的内框线颜色
- 探秘Java中String、StringBuilder以及StringBuffer
- Xcode的简单使用
- mysql warning 日志_Mysql5.7.19安装后错误日志中有警告
- 键盘鼠标共享效率工具-Synergy
- 乐视网:受让方致新云网与融创、盈瑞汇鑫无关联关系
- 机器学习代码实战——决策树(预测泰坦尼号船员生存情况)
- 数据可视化详解+代码演练
- 1.1.6版本Druid连接MSSQLServer 2008 R2报错The query timeout value -1 is not valid. #2210
- ID3、C4.5、CART决策树算法解析(关键内容讲解)
- 第1章 数据库系统概论-单元测验-数据库原理及应用
- C++ Primer 5th ed.pdf
- 不得不看的黑客工具集
- edge浏览器开启ie兼容模式
- ubuntu16.04部署开源看板项目wekan(非docker部署)
- 程序设计基本结构———顺序、选择与循环
- 怎么查看正在连接的无线网密码
- 写给初中级前端的高级进阶指南
- mysql报错不停止继续执行_mysql 8 启动失败(本地计算机上的mysql服务启动后停止。某些服务再未由其他服务或程序使用时将自动停止)...
- php 白鹭对接,微信好友排行榜 - 白鹭对接