Windows Phone 7: Como analisar a string do Caminho Bezier como no XAM
Tenho necessidade de analisar Bezier Path Strings, mas aparentemente oSystem.Windows.Media.Geometry
versão @ na estrutura .Net CF não possui oParse()
método disponível em sua contraparte normal. No entanto, digitar o seguinte XAML funciona, portanto, deve haver uma maneira de o sistema analisar a String de dados do caminh
<Path Stroke="Blue" Data="M 0 0 Q 10 10 20 0"/>
Alguma pista sobre como eu posso iniciar isso analisando-me com uma string personalizada fora do XAM
Claro que também poderia tentar escrever meu próprio analisador usando regex, mais ou menos, mas eu preferiria não lidar com isso sozinho, pois a estrutura claramente é capaz diss
Atualiza
Ao usar o XAMLReader sugerido, recebo uma exceção estranha ao definir um StrokeThickness como o @ recém-criaPath
:
path.StrokeThickness = strokeWidth; //ArgumentException ??? (strokeWidth = 6)
Quando altero o caminho do código para renderizar usando meu analisador manual, tudo funciona corretamente. Estou faltando alguma coisa aqui? Nada muda, exceto o analisador.
Geração manual de dados:
//"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;
Using XamlReader
String formattedXAMLInput = String.Format("<Path xmlns='http://schemas.microsoft.com/winfx/2006/xaml/presentation' Stroke='Black' Data='{0}'/>", pathData);
Path xamlpath = (Path)XamlReader.Load(formattedXAMLInput);
Geometry xamldata = xamlpath.Data;
path.Data = xamldata;