Windows Phone 7: ¿Cómo analizar la cadena Bezier Path como en XAML?
Tengo la necesidad de analizar Bezier Path Strings, pero aparentemente elSystem.Windows.Media.Geometry
version en el marco .Net CF no tiene laParse()
método que está disponible en su contraparte normal. Sin embargo, ingresar el siguiente XAML funciona, por lo que debe haber una forma en que el sistema analice la Cadena de datos de rut
<Path Stroke="Blue" Data="M 0 0 Q 10 10 20 0"/>
¿Alguna pista sobre cómo puedo iniciar este análisis con una cadena personalizada fuera de XAML?
Por supuesto, también podría intentar escribir mi propio analizador sintáctico utilizando expresiones regulares más o menos, pero preferiría no manejar esto yo mismo, ya que el marco claramente es capaz de hacerlo.
Actualiza
Cuando uso el XAMLReader sugerido, obtengo una Excepción extraña cuando configuro un StrokeThickness para el @ creado recientemenPath
:
path.StrokeThickness = strokeWidth; //ArgumentException ??? (strokeWidth = 6)
Cuando cambio la ruta de código para representar usando mi analizador manual, todo funciona correctamente. ¿Me estoy perdiendo de algo? Nada cambia excepto el analizador.
Generación manual de datos:
//"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;
Usando 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;