我想创建一个简单的十字架,它由两条线组成。线条应该有不同的颜色。我创建了一个继承Form形式的类。该类包含两行并计算行的坐标。我已经读过,如果我从Shape继承,我必须实现DefiningGeometry属性。但是,如何在该属性的get部分返回两行?
提前致谢。
答案 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
看起来好像在两行上实际上是不同的颜色:
然后,您需要做的就是将其转换为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>