创建由多个单行组成的自定义形状

时间:2014-05-07 10:41:28

标签: wpf shape

我想创建一个简单的十字架,它由两条线组成。线条应该有不同的颜色。我创建了一个继承Form形式的类。该类包含两行并计算行的坐标。我已经读过,如果我从Shape继承,我必须实现DefiningGeometry属性。但是,如何在该属性的get部分返回两行?

提前致谢。

2 个答案:

答案 0 :(得分:1)

听起来你可以使用CombinedGeometry Class将你的线组合在一起......唯一的问题是你需要使用LineGeometry类而不是Line s 。您可以执行以下操作(来自MSDN上的链接CombinedGeometry页面):

<Path Stroke="Black" StrokeThickness="1" Fill="#CCCCFF">
  <Path.Data>

    <!-- Combines two geometries using the XOR combine mode. -->
    <CombinedGeometry GeometryCombineMode="Xor">
      <CombinedGeometry.Geometry1>
        <EllipseGeometry RadiusX="50" RadiusY="50" Center="75,75" />
      </CombinedGeometry.Geometry1>
      <CombinedGeometry.Geometry2>
        <EllipseGeometry RadiusX="50" RadiusY="50" Center="125,75" />
      </CombinedGeometry.Geometry2>
    </CombinedGeometry>
  </Path.Data>
</Path>

当然,您希望将这些EllipseGeometry对象替换为LineGeometry个对象,但这并不困难,因为它们具有相似的属性。


更新&gt;&gt;&gt;

不幸的是,我不认为你可以使用包含不同颜色几何形状的CombinedGeometry对象......整个形状必须用一个Brush绘制。但是,你可以伪造两种颜色,巧妙定位GradientStop。另外,正如@Clemens所提到的,也许GeometryGroup对你来说更容易使用......尝试这样的事情:

<Path StrokeThickness="5" Fill="Blue" HorizontalAlignment="Center" VerticalAlignment="Center">
    <Path.Data>
        <GeometryGroup>
            <LineGeometry StartPoint="50,0" EndPoint="50,100"  />
            <LineGeometry StartPoint="0,50" EndPoint="100,50"  />
        </GeometryGroup>
    </Path.Data>
    <Path.Stroke>
        <LinearGradientBrush StartPoint="0,0" EndPoint="1,0">
            <GradientStop Color="LightGreen" Offset="0" />
            <GradientStop Color="LightGreen" Offset="0.475" />
            <GradientStop Color="Red" Offset="0.475" />
            <GradientStop Color="Red" Offset="0.525" />
            <GradientStop Color="LightGreen" Offset="0.525" />
            <GradientStop Color="LightGreen" Offset="0" />
        </LinearGradientBrush>
    </Path.Stroke>
</Path>

这个Brush看起来好像在两行上实际上是不同的颜色:

enter image description here

然后,您需要做的就是将其转换为C#以从DefiningGeometry属性返回它。请使用链接页面中的示例和MSDN上的GeometryGroup class页面来帮助您解决此问题。

答案 1 :(得分:1)

您可以通过填充矩形的DrawingBrush中的两个GeometryDrawings绘制两条不同颜色的线:

<Rectangle Width="20" Height="20">
    <Rectangle.Fill>
        <DrawingBrush>
            <DrawingBrush.Drawing>
                <DrawingGroup>
                    <GeometryDrawing Geometry="M0,-10 L0,10">
                        <GeometryDrawing.Pen>
                            <Pen Brush="Blue" Thickness="3"/>
                        </GeometryDrawing.Pen>
                    </GeometryDrawing>
                    <GeometryDrawing Geometry="M-10,0 L10,0">
                        <GeometryDrawing.Pen>
                            <Pen Brush="Red" Thickness="3"/>
                        </GeometryDrawing.Pen>
                    </GeometryDrawing>
                </DrawingGroup>
            </DrawingBrush.Drawing>
        </DrawingBrush>
    </Rectangle.Fill>
</Rectangle>