写代码出身的我们经常需要使用一些简单 但是不是规则图形的Path 但限于美工功底有限 不知道怎么去画

下面我告诉大家一些简单的小技巧 用代码来画Path 个人还是比较喜欢用代码 因为数值控制的更精细

MSDN告诉我们,Path可以用这些形状绘制:

ArcSegment 类 表示两点之间的一条椭圆弧。

BezierSegment 类 表示在两个点之间绘制的一条三次贝塞尔曲线。

LineSegment 类 在PathFigure中的两个点之间创建一条直线。

PolyBezierSegment 类 表示一条或多条三次方贝塞尔曲线。

PolyLineSegment 类 表示由PointCollection定义的线段集合,每个Point指定线段的终点。

PolyQuadraticBezierSegment 类 表示一系列二次贝塞尔线段。

QuadraticBezierSegment 类 在PathFigure的两点之间创建一条二次贝塞尔曲线。

说了这么多,好复杂呀,我们可以挑最简单的来用:

LineSegment 画直线,PolyLineSegment 画折线,ArcSegment 画圆弧

其实有了这三个类,我们可以画绝大多数简单常用的形状了,下面我举两个例子

这个形状宽和高都是100,其中矩形宽100高90,三角宽10高10居中

对于这样有棱角的图形,我们只需要找到他所有的顶点就行了

然后顺时针依次连起来,用PolyLineSegment折线来表示就行了

1 <Path Stroke="Red" StrokeThickness="1">
2 <Path.Data>
3 <PathGeometry>
4 <PathFigure StartPoint="0,0">
5 <PolyLineSegment Points="100,0 100,90 55,90 50,100 45,90 0,90 0,0"></PolyLineSegment>
6 </PathFigure>
7 </PathGeometry>
8 </Path.Data>
9 </Path>

来看这个带有圆角的图形,4个圆弧的半径是5,其他属性和上图一样.我们需要将它拆分,拆分成8个部分,4个圆弧和4个边,因为左上角圆弧的关系,起点设置成(5,0),每一部分的起点,都是上一部分的终点:

  1. 上边的直线:终点(95,0)
  2. 右上角的圆弧:终点(100,5),Size(5,5) 因为圆弧表示的是椭圆的圆弧,Size就是Size(宽,高),当宽和高都一样设置为5时,就指的是半径为5的圆的圆弧了
  3. 右边的直线:终点(100,85)
  4. 右下角的圆弧:终点(95,90),Size(5,5)
  5. 下边的折线:点的集合(55,90 50,100 45,90 5,90) 由于我们是顺时针来的,下边点的集合是从右到左依次来的
  6. 左下角圆弧:终点(0,85),Size(5,5)
  7. 左边的直线:终点(0,5)
  8. 左上角的圆弧:终点(5,0) 与起点重合

 1 <Path Stroke="Red" StrokeThickness="1">
2 <Path.Data>
3 <PathGeometry>
4 <PathFigure StartPoint="5,0">
5 <LineSegment Point="95,0"></LineSegment>
6 <!--SweepDirection获取或设置一个值,该值指定是以 Clockwise 方向还是以 Counterclockwise 方向绘制弧-->
7 <!--顺时针绘制还是逆时针绘制,你试下另一个值,看下效果就知道怎么回事了-->
8 <ArcSegment Point="100,5" Size="5,5" SweepDirection="Clockwise"></ArcSegment>
9 <LineSegment Point="100,85"></LineSegment>
10 <ArcSegment Point="95,90" Size="5,5" SweepDirection="Clockwise"></ArcSegment>
11 <PolyLineSegment Points="55,90 50,100 45,90 5,90"></PolyLineSegment>
12 <ArcSegment Point="0,85" Size="5,5" SweepDirection="Clockwise"></ArcSegment>
13 <LineSegment Point="0,5"></LineSegment>
14 <ArcSegment Point="5,0" Size="5,5" SweepDirection="Clockwise"></ArcSegment>
15 </PathFigure>
16 </PathGeometry>
17 </Path.Data>
18 </Path>

WPF绘制简单常用的Path(转)的更多相关文章

  1. WPF绘制简单常用的Path

    写代码出身的我们经常需要使用一些简单 但是不是规则图形的Path 但限于美工功底有限 不知道怎么去画 下面我告诉大家一些简单的小技巧 用代码来画Path 个人还是比较喜欢用代码 因为数值控制的更精细 ...

  2. WPF中的常用布局

    一 写在开头1.1 写在开头评价一门技术的好坏得看具体的需求,没有哪门技术是面面俱到地好. 1.2 本文内容本文主要内容为WPF中的常用布局,大部分内容转载至https://blog.csdn.net ...

  3. WPF中的常用布局 栈的实现 一个关于素数的神奇性质 C# defualt关键字默认值用法 接口通俗理解 C# Json序列化和反序列化 ASP.NET CORE系列【五】webapi整理以及RESTful风格化

    WPF中的常用布局   一 写在开头1.1 写在开头微软是一家伟大的公司.评价一门技术的好坏得看具体的需求,没有哪门技术是面面俱到地好,应该抛弃对微软和微软的技术的偏见. 1.2 本文内容本文主要内容 ...

  4. WPF绘制自定义窗口

    原文:WPF绘制自定义窗口 WPF是制作界面的一大利器,下面就用WPF模拟一下360的软件管理界面,360软件管理界面如下: 界面不难,主要有如下几个要素: 窗体的圆角 自定义标题栏及按钮 自定义状态 ...

  5. 学习笔记:HTML5 Canvas绘制简单图形

    HTML5 Canvas绘制简单图形 1.添加Canvas标签,添加id供js操作. <canvas id="mycanvas" height="700" ...

  6. WPF绘制党徽(立体效果,Cool)

    原文:WPF绘制党徽(立体效果,Cool) 前面用WPF方式绘制了党旗(WPF制作的党旗) ,去年3月份利用C# 及GDI+绘制过党徽,这次使用WPF来绘制党徽. ------------------ ...

  7. WPF 一个简单的颜色选择器

    原文:WPF 一个简单的颜色选择器 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/BYH371256/article/details/8340999 ...

  8. WPF入门(四)->线形区域Path内容填充之填充图(ImageBrush)

    原文:WPF入门(四)->线形区域Path内容填充之填充图(ImageBrush) 前面我们提到了LinearGradientBrush可以用来画渐变填充图,那么我们同时也可以使用ImageBr ...

  9. WPF入门(四)->线形区域Path内容填充之渐变色(LinearGradientBrush)

    原文:WPF入门(四)->线形区域Path内容填充之渐变色(LinearGradientBrush) 前面我们介绍到,Path对象表示一个用直线或者曲线连接的图形,我们可以使用Path.Data ...

随机推荐

  1. 自已开发完美的触摸屏网页版仿app弹窗型滚动列表选择器/日期选择器

    手机端网页版app在使用下拉列表时,传统的下拉列表使用起来体验非常不好,一般做的稍好一点的交互功能界面都不会直接使用下拉列表,所以app的原生下拉列表都是弹窗列表选择,网页型app从使用体验上来当然也 ...

  2. SpringBoot自动配置的实现原理

    之前一直在用SpringBoot框架,一直感觉SpringBoot框架自动配置的功能很强大,但是并没有明白它是怎么实现自动配置的,现在有空研究了一下,大概明白了SpringBoot框架是怎么实现自动配 ...

  3. python高级内置函数和各种推导式的介绍:一行搞定的代码

    一.知识要点 all 都为真 any 有真的 min 最小的 max 最大的 sum 求和 reversed 反转 sorted 排序 zip 对应合并 [] 列表推倒式 () 生成器 {} 字典推倒 ...

  4. 019——VUE中v-for与computer结合功能实例讲解

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  5. 快速切题 poj 1002 487-3279 按规则处理 模拟 难度:0

    487-3279 Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 247781   Accepted: 44015 Descr ...

  6. 【实用工具】google访问不了比较好的解决办法

    一.直接添加ip,74.125.128.(31~167)都可以,不过不稳定 二.不使用.hk的后缀名,使用.tw,co.jp等均可(同IE用户) 三.下载这个脚本,进行安装(右上角点击“install ...

  7. pulltoRefresh类图

  8. 20165202 2017-2018-2 《Java程序设计》第8周学习总结

    20165202 2017-2018-2 <Java程序设计>第8周学习总结 教材学习内容总结 Ch12 进程与线程 线程是比进程更小的单位,一个进程在其执行过程中,可以产生多个线程 Ja ...

  9. PostgreSQL时间格式及相关函数实践

    在创建表的时候,有客户需要将时间转为字符串,而且要求了具体的格式,如:20181115101010001.方便记录数据的更新时间,貌似是给Mysql使用,当时就很蛋疼,时间格式存储子啊数据库中就是va ...

  10. postfix基于客户端的访问控制

    1.基于客户端的访问控制概览 postfix内置了多种反垃圾邮件的机制,其中就包括“客户端”发送邮件限制.客户端判别机制可以设定一系列客户信息的判别条件: smtpd_client_restricti ...