2010-12-30 7 views
3

Ich möchte die PathGeometry, die LineSegment bestehen.Convert XAML PathGeometry in WPF PathGeometry

Also, ich benutze diesen ersten Code, aber es ist ein Fehler.

Wenn ich diesen zweiten Code verwende, ist es kein Fehler, aber es besteht nicht aus LineSegment. Das Ergebnis ist PolyLineSegment, aber ich möchte LineSegment.

PathGeometry temp = (PathGeometry)Geometry.Parse(
       "M29,329L30,331L31,334L33,336L34,338L36,341L38,343L39,345L41,348L44,352L46,353L47,355L48,356L49,357L49,357L50,358L50,358L51,357L50,356L51,354L51,350L53,342L54,334L58,320L60,315L61,311L63,308L63,306L64,304L65,303L65,302L66,301L66,301L66,301L66,301L66,301L66,301L66,301"); 

Wie konvertiere ich XAML PathGeometry zu WPF PathGeometry?

Dank

Antwort

9

Ihr Code der XAML ist falsch für das Parsen, benötigen Sie einen XAML-Reader zu verwenden und das Ergebnis an den erforderlichen Typ gegossen. z.B .:

System.Windows.Shapes.Path newPath = (System.Windows.Shapes.Path)System.Windows.Markup.XamlReader.Parse("<Path xmlns='http://schemas.microsoft.com/winfx/2006/xaml/presentation' Width='20' Height='80' Stretch='Fill' Fill='#FF000000' Data='M 20,25.2941L 20,29.4118L 15.9091,29.4118L 15.9091,40L 12.2727,40L 12.2727,29.4118L 2.54313e-006,29.4118L 2.54313e-006,25.6985L 13.4872,7.62939e-006L 15.9091,7.62939e-006L 15.9091,25.2941L 20,25.2941 Z M 12.2727,25.2941L 12.2727,5.28493L 2.09517,25.2941L 12.2727,25.2941 Z M 20,65.2941L 20,69.4118L 15.9091,69.4118L 15.9091,80L 12.2727,80L 12.2727,69.4118L -5.08626e-006,69.4118L -5.08626e-006,65.6985L 13.4872,40L 15.9091,40L 15.9091,65.2941L 20,65.2941 Z M 12.2727,65.2941L 12.2727,45.2849L 2.09517,65.2941L 12.2727,65.2941 Z ' HorizontalAlignment='Left' VerticalAlignment='Top' Margin='140,60,0,0'/>"); 
LayoutRoot.Children.Add(newPath); 

Wenn Sie Code-Behind verwenden, gibt es keinen Grund, warum Sie eine XAML-Schnipsel analysieren möchten? Sie können programmatisch einen Pfad erstellen, wie folgt:

Path path = new Path(); 
PathGeometry geometry = new PathGeometry(); 
PathFigure figure = new PathFigure(); 
figure.StartPoint = new Point(10,10); 
figure.Segments.Add(new LineSegment() 
{ 
    Point = new Point (20, 20) 
}); 

// e.g. add more segments here 

geometry.Figures.Add(figure); 
path.Data = geometry; 

Ein Pfad einer Geometrie zusammengesetzt ist, die aus Zahlen besteht, die aus Segmenten zusammengesetzt werden!

Wenn Sie die vereinfachte Pfaddaten in Code verwenden, hinter Ihnen einen universellen Wert Konverter verwenden:

http://www.scottlogic.co.uk/blog/colin/2010/07/a-universal-value-converter-for-wpf/

+0

Weil ich die PathGeometry zu XAML-Datei speichern und wiederherstellen PathGeometry wollen aus XAML-Datei. –

+0

OK - siehe meine Bearbeitung oben. Verwenden Sie einen XAML-Reader – ColinE

+0

Der Pfad, PathGeometry und PathFigure-Code war sehr hilfreich für mich, danke. – MikeMalter