Windows Phone 7:如何在XAML中解析Bezier Path字符串?

我需要解析Bezier Path Strings,但显然.Net CF框架中的System.Windows.Media.Geometry版本没有Parse()方法,它可以在它的普通对应方法中使用。 但是,输入以下XAML确实有效,因此必须有一种方法解析Path Data String。

有关如何使用XAML外部的自定义字符串启动此解析的任何线索?

我当然也可以尝试使用正则表达式来编写我自己的解析器,但我不想自己处理它,因为框架显然能够实现它。

更新

当使用建议的XAMLReader时,当我将StrokeThickness设置为新创建的Path时,我得到一个奇怪的exception:

 path.StrokeThickness = strokeWidth; //ArgumentException ??? (strokeWidth = 6) 

当我使用我的手动解析器更改代码路径以进行渲染时,一切正常。 我在这里错过了什么吗? 除解析器外没有任何变化。

手动生成数据:

  //"M {0} {1} Q {2} {3} {4} {5}" String regex_input = @"M (\d+) (\d+) Q (\d+) (\d+) (\d+) (\d+)"; Regex regex = new Regex(regex_input); Match match = regex.Match(pathData); int startx = int.Parse(match.Groups[1].Value); int starty = int.Parse(match.Groups[2].Value); int controlx = int.Parse(match.Groups[3].Value); int controly = int.Parse(match.Groups[4].Value); int endx = int.Parse(match.Groups[5].Value); int endy = int.Parse(match.Groups[6].Value); PathGeometry geo = new PathGeometry(); PathFigure figure = new PathFigure(); figure.StartPoint = new Point(startx, starty); QuadraticBezierSegment quad = new QuadraticBezierSegment(); quad.Point1 = new Point(controlx, controly); quad.Point2 = new Point(endx, endy); figure.Segments.Add(quad); geo.Figures.Add(figure); path.Data = geo; 

使用XamlReader

  String formattedXAMLInput = String.Format("", pathData); Path xamlpath = (Path)XamlReader.Load(formattedXAMLInput); Geometry xamldata = xamlpath.Data; path.Data = xamldata; 

我们目前不公开路径迷你语言解析器的API。 它是XAML解析器的内部。

但是,您可以使用XamlReader基于迷你语言字符串动态创建Path对象:

 Path path = XamlReader.Load("") as Path; 

请注意,这实际上不会通过API向您公开几何体的细节,但您可以在应用中显示生成的路径。