0

我有这两种形状:

图1 图 2

拳头图片代码:

<Path Fill="Orange">
    <Path.Data>
        <PathGeometry>
            <PathFigure StartPoint="0,100">
                <BezierSegment Point1="50,110" Point2="50,110" Point3="100,100"></BezierSegment>
                <LineSegment Point="100,80"></LineSegment>
                <LineSegment Point="120,90"></LineSegment>
                <LineSegment Point="120,70"></LineSegment>
                <LineSegment Point="100,60"></LineSegment>
                <LineSegment Point="100,20"></LineSegment>
                <LineSegment Point="80,0"></LineSegment>
                <LineSegment Point="20,0"></LineSegment>
                <LineSegment Point="0,20"></LineSegment>
                <LineSegment Point="0,40"></LineSegment>
                <LineSegment Point="-20,20"></LineSegment>
                <LineSegment Point="-20,40"></LineSegment>
                <LineSegment Point="0,60"></LineSegment>
            </PathFigure>
        </PathGeometry>
    </Path.Data>
</Path>

第二张图片代码:

<Path Fill="Orange">
    <Path.Data>
        <PathGeometry>
            <PathFigure>
                <LineSegment Point="0,25"></LineSegment>
                <LineSegment Point="250,25"></LineSegment>
                <LineSegment Point="250,0"></LineSegment>
            </PathFigure>
        </PathGeometry>
    </Path.Data>
</Path>

我如何将它们组合成这样的东西(忽略文本): 在此处输入图像描述

我需要在 C#(不是 xaml)中完成此操作。谢谢!

4

1 回答 1

9

对于想要了解 XAML 方法的用户

基本上,您可以使用一个CombinedGeometry对象来执行此操作:

<Path Stroke="Black" StrokeThickness="1" Fill="#CCCCFF">
    <Path.Data>
        <!-- Combines two geometries using the exclude combine mode. -->
        <CombinedGeometry GeometryCombineMode="Union">
            <CombinedGeometry.Geometry1>
                <PathGeometry>
                    <PathFigure StartPoint="0,100">
                        <BezierSegment Point1="50,110" Point2="50,110" Point3="100,100"></BezierSegment>
                        <LineSegment Point="100,80"></LineSegment>
                        <LineSegment Point="120,90"></LineSegment>
                        <LineSegment Point="120,70"></LineSegment>
                        <LineSegment Point="100,60"></LineSegment>
                        <LineSegment Point="100,20"></LineSegment>
                        <LineSegment Point="80,0"></LineSegment>
                        <LineSegment Point="20,0"></LineSegment>
                        <LineSegment Point="0,20"></LineSegment>
                        <LineSegment Point="0,40"></LineSegment>
                        <LineSegment Point="-20,20"></LineSegment>
                        <LineSegment Point="-20,40"></LineSegment>
                        <LineSegment Point="0,60"></LineSegment>
                    </PathFigure>
                </PathGeometry>
            </CombinedGeometry.Geometry1>
            <CombinedGeometry.Geometry2>
                <PathGeometry>
                    <PathFigure StartPoint="0,100">
                        <LineSegment Point="0,25"></LineSegment>
                        <LineSegment Point="250,25"></LineSegment>
                        <LineSegment Point="250,0"></LineSegment>
                    </PathFigure>
                </PathGeometry>
            </CombinedGeometry.Geometry2>
        </CombinedGeometry>
    </Path.Data>
</Path>

请查看如何:在 MSDN 上创建组合几何页面以获取完整详细信息。

另请注意,您需要设置StartPoint这些PathFigure对象的属性以正确排列您的形状。

更新>>>

对于想了解 C# 方法的用户

抱歉,我没有注意到您想使用代码。在代码中,您必须命名您的PathGeometry对象并将它们放入一个Resources部分:

<Application.Resources>
    <PathGeometry x:Key="Shape1">
        ...
    </PathGeometry>
    <PathGeometry x:Key="Shape2">
        ...
    </PathGeometry>
</Application.Resources>

然后你仍然可以使用一个CombinedGeometry对象:

PathGeometry shape1 = (PathGeometry)Application.Current.FindResource("Shape1");
PathGeometry shape2 = (PathGeometry)Application.Current.FindResource("Shape2");
CombinedGeometry combinedGeometry = new CombinedGeometry(
    GeometryCombineMode.Union, shape1, shape2);
Path combinedPath = new Path();
combinedPath.Data = combinedGeometry; 

请查看 MSDN 上的CombinedGeometry Class页面以获取有关此方法的更多信息。

于 2013-10-01T10:56:47.313 回答