WPF的图形微语言

WPF的图形微语言

前言

WPF为定义几何图形增加了一种更简明的替换语法,通过该语法可用更少的标记表示详细的图形,这种语法称为图形微语言,并且由于应用于Path元素,也称为路径微语言。

示例

使用两条闭合路径创建了一个基本三角形

xml 复制代码
<Path Stroke="Blue">
	<Path.Data>
		<PathGeometry>
			<PathFigure IsClosed="True" StartPoint="10,100">
				<LineSegment Point="100,100"/>
				<LineSegment Point="100,50"/>
			</PathFigure>
		</PathGeometry>
	</Path.Data>
</Path>

使用微语言创建该图形

xml 复制代码
<Path Stroke="Blue" Data="M 10,100 L 100,100 L 100,50 Z"/>

这个路径使用一个包含4个命令序列,第一个命令M创建PathFigure,并将起点设置为(10,100),接下来的两个命令L创建线段,最后一个命令Z结束PathFigure,并将IsClose属性设置为true,这个字符串的逗号是可选的,同样命令及其参数之间的空格也是可选的,但在相邻的两个参数之间以及命令之间要保留一个空格。

进一步精简为下面的形式:

xml 复制代码
<Path Stroke="Blue" Data="M10 100 L100 100 L100 50 Z"/>

当使用微语言创建几何图形时,实际上是创建了StreamGeometry对象而不是PathGeometry对象,因此,以后再代码中不能修改图形。如果这是不能接受的,可显示的创建PathGeometry,但使用相同的语法定义其PathFigure对象几何。

xml 复制代码
<Path Stroke="Blue">
	<Path.Data>
		<PathGeometry Figures="M 10,100 L 100,100 L 100,50 Z"/>
	</Path.Data>
</Path>
名称 说明
F value 设置Geometry.FillRule属性。0表示EvenOdd,1表示NoneZero。如果决定使用该命令,就必须将该命令放在字符串的开头
M x,y 为几何图形创建新的PathFigure对象,并设置其起点。
L x,y 创建一条到指定点的LineSegment几何图形。
H x,y 使用指定的X值创建一条水平的LineSegment几何图形,并保持Y值不变。
V x,y 使用指定的Y值创建一条水平的LineSegment几何图形,并保持X值不变。
A radiusX,radiusY 创建一条到指定点的ArgSegment线段。
C x1,y1,x2,y2 x,y 创建到指定点的贝塞尔曲线,使用(x1,y1)和(x2,y2)作为控制点。
Q x1,y1 x,y 创建到指定点的二次贝塞尔曲线,使用一个控制点(x1,y1)。
S x2,y2 x,y 通过将前一条贝塞尔曲线的第二个控制点作为新建贝塞尔曲线的第一个控制点,从而创建一条光滑的贝塞尔曲线。
Z 结束当前PathFigure对象,并将IsClosed属性设置为true。如果不希望将IsClosed属性设置为true,就不必使用该命令。如果希望开始一个新的PathFigure对象或者结束字符串,只需使用M命令
相关推荐
fogota2 天前
Emoji与Segoe MDL2 Assets的比较
c#·wpf
fogota2 天前
C# WPF 按钮加载字体图标 / 动物头像
c#·.net·wpf
fogota2 天前
C# WPF 按钮加载系统图标 / 动物头像
c#·.net·wpf
军训猫猫头2 天前
C# 封装 MySQL 自动写入与查询工具类(基于 MySqlConnector)
mysql·c#·.net·wpf
gis开发之家3 天前
Spring Boot 4 定时任务与异步线程池:从 @Scheduled 到高并发任务编排(生产级实战)
java·spring boot·后端·wpf·spring boot4
clz13145214 天前
如何设计一个优雅可靠的金融级联机接口
wpf
闲云自留地5 天前
云平台存储管理员:Cinder 创建挂载卷 + Swift 分布式存储原理
分布式·wpf·swift
敲代码的嘎仔6 天前
从集群锁失效到异步领券:我用分布式锁 + Redisson + MQ 把领券接口 RT 从 200ms 压到 15ms
java·数据库·redis·分布式·缓存·ai·wpf
闲云自留地6 天前
OpenStack 的身份管家:Keystone 令牌、RBAC 权限模型拆解
wpf·openstack
FuckPatience8 天前
WPF 窗体唤醒,判断是否已存在,存在则弹出
wpf