用途:在 WPF 应用中实现基于矢量的 2D 图形,适用于矢量图形界面、图标、图表和示意图的构建。
主要能力:
- 图形层次:Shape(FrameworkElement 子类,参与布局并支持事件)包括 Ellipse、Rectangle、Line、Polyline、Polygon、Path;Drawing 为轻量级、不支持事件,包括 GeometryDrawing、ImageDrawing、VideoDrawing、GlyphRunDrawing。
- 基本形状:可用 XAML 定义 Ellipse、Rectangle(支持 RadiusX/RadiusY 圆角)、Line、Polyline、Polygon,设置 Fill、Stroke、StrokeThickness 等属性。
- Path 与 Geometry:Path 可通过 PathGeometry(PathFigure + LineSegment、ArcSegment 等)或迷你语言语法定义复杂形状。迷你语言命令包括 M(MoveTo)、L(LineTo)、H(水平线)、V(垂直线)、A(弧线)、C(三次贝塞尔)、Q(二次贝塞尔)、Z(闭合路径);小写为相对坐标,大写为绝对坐标。
- Geometry 类型:RectangleGeometry、EllipseGeometry、LineGeometry;CombinedGeometry 支持 Union、Intersect、Exclude、Xor 组合模式;GeometryGroup 支持 EvenOdd 与 Nonzero 填充规则。
- Brush:支持 SolidColorBrush、LinearGradientBrush 等,详细内容参见 /creating-wpf-brushes 技能。
- 描边样式:StrokeDashArray 定义虚线模式;StrokeStartLineCap、StrokeEndLineCap 支持 Flat、Round、Square、Triangle;StrokeLineJoin 支持 Miter、Bevel、Round。
使用方式:在 XAML 中直接声明 Shape 或 Path 元素,或通过 C# 代码构建 Geometry(如 StreamGeometry)。StreamGeometry 为不可变且经过优化,使用 Open() 获取上下文后调用 BeginFigure、LineTo 等方法,最后调用 Freeze() 提升性能。
适用场景:WPF 矢量图形界面、图标、图表、示意图等。
限制与性能考量:Shape 复杂度高,适合交互元素(点击、拖拽);DrawingVisual 复杂度低,适合大型静态图形;StreamGeometry 复杂度最低,适合固定复杂路径。相关技能包括 /creating-wpf-brushes、/creating-wpf-vector-icons、/creating-graphics-in-code。参考资料为 Microsoft Docs 的 Shapes and Basic Drawing、Geometry Overview、Painting with Brushes。