【WPF】WPF的二维路径标记语法绘图PathGeometry

我们用Path来实现一条直线:

<Path Stroke="Black" StrokeThickness="1" >
        <Path.Data>
            <LineGeometry StartPoint="10,20" EndPoint="100,130" />
        </Path.Data>
    </Path>

这种方式下写一些简单的几何图形还行,但对于PathGeometry来说有些冗繁,因此XAML采用了一种简单的路径标记语法来简化这一过程,

 <Path Stroke="Black" Fill="Gray">
        <Path.Data>
            <PathGeometry Figures="M 10,100 L 10,150 Q 10,300 300,-200" />
        </Path.Data>
    </Path>

甚至可以直接简化为:

<Path Stroke="Black" Fill="Gray" Data="M 10,100 L 10,150 Q 10,300 300,-200" />

这里简单解释下:

M 是值起始点(Move移动到某一个位置)大写的 M 指示 startPoint 是绝对值;小写的 m 指示 startPoint 是相对于上一个点的偏移量。

L是绘制一条直线(Line 当前点到指定点的一条直线)

Q / T(平滑)是二次贝塞尔曲线,有两个点:一个控制点,一个结束点

C / S(平滑)是三次方贝塞尔曲线,有三个点:两个控制点,一个结束点

H / V 分别是水平直线和垂直直线。

A 创建一条椭圆弧线,这个就比较复杂了,A size(弧线的 x 轴半径和 y 轴半径) rotationAngle(椭圆的旋转度数) isLargeArcFlag(如果弧线的角度应大于或等于 180 度,则设置为 1;否则设置为 0) sweepDirectionFlag(如果弧线按照正角方向绘制,则设置为 1;否则设置为 0) endPoint(结束点)如A 100,100 0 1 1 300,299 

 

Z 结束。

其他详细参数:路径标记语法

例子:Border设置一个不规则背景色

复制代码
<Border Grid.Row="2" Grid.Column="1" Width="200" Height="200">
            <Border.Background>
                <DrawingBrush>
                    <DrawingBrush.Drawing>
                        <GeometryDrawing Brush="Gold">
                            <GeometryDrawing.Geometry>
                                <PathGeometry Figures="M0,-100 L25,-100 A25,25 180,1,1 75,-100 L 100,-100 Q 200,-200 100,100 H0 Q-100,-200 0,-100 Z"></PathGeometry>
                            </GeometryDrawing.Geometry>
                            <GeometryDrawing.Pen>
                                <Pen Thickness="2" Brush="Tomato" />
                            </GeometryDrawing.Pen>
                        </GeometryDrawing>
                    </DrawingBrush.Drawing>
                </DrawingBrush>
            </Border.Background>
        </Border>
复制代码

posted on   梦琪小生  阅读(1757)  评论(0编辑  收藏  举报

编辑推荐:
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

导航

统计

点击右上角即可分享
微信分享提示