2017-04-25 77 views
3

我想绘制一个简单的Path,它使用PolygonRenderedGeometry作为Data使用渲染几何作为路径数据不起作用

Polygon polygon = new Polygon(); 
polygon.Points = new PointCollection { new Point(0, 0), new Point(0, 100), new Point(150, 150) }; 
var path = new Path 
{ 
    Data = polygon.RenderedGeometry, 
    Stroke = Brushes.LightBlue, 
    StrokeThickness = 2, 
    Fill = Brushes.Green, 
    Opacity = 0.5 
}; 
Panel.SetZIndex(path, 2); 
canvas.Children.Add(path); 

但是我的Canvas没有显示任何内容。

+1

那岂不是更简单的使用[的PathGeometry( https://msdn.microsoft.com/en-us/library/system.windows.media.pathgeometry(v=vs.110).aspx)与多边形点? – Clemens

+0

@Clemens我新推出WPF。我将检查PathGeometry类。感谢您的推荐。 –

回答

2

您应该强制几何图形在您之前被渲染到Canvas。您可以通过调用PolygonArrangeMeasure方法做到这一点:

Polygon polygon = new Polygon(); 
polygon.Points = new PointCollection { new Point(0, 0), new Point(0, 100), new Point(150, 150) }; 
polygon.Arrange(new Rect(canvas.RenderSize)); 
polygon.Measure(canvas.RenderSize); 
var path = new Path 
{ 
    Data = polygon.RenderedGeometry, 
    Stroke = Brushes.LightBlue, 
    StrokeThickness = 2, 
    Fill = Brushes.Green, 
    Opacity = 0.5 
}; 
Panel.SetZIndex(path, 2); 
canvas.Children.Add(path); 
+0

谢谢。它像一个魅力。 –

1

你不应该使用多边形元素来定义一个路径的几何形状。

而是直接创建PathGeometry这样的:

var figure = new PathFigure 
{ 
    StartPoint = new Point(0, 0), 
    IsClosed = true 
}; 

figure.Segments.Add(new PolyLineSegment 
{ 
    Points = new PointCollection { new Point(0, 100), new Point(150, 150) }, 
    IsStroked = true 
}); 

var geometry = new PathGeometry(); 
geometry.Figures.Add(figure); 

var path = new Path 
{ 
    Data = geometry, 
    Stroke = Brushes.LightBlue, 
    StrokeThickness = 2, 
    Fill = Brushes.Green, 
    Opacity = 0.5 
}; 

或直接使用Path Markup Syntax创建一个字符串的几何:

var path = new Path 
{ 
    Data = Geometry.Parse("M0,0 L0,100 150,150Z"), 
    Stroke = Brushes.LightBlue, 
    StrokeThickness = 2, 
    Fill = Brushes.Green, 
    Opacity = 0.5 
};