我想在Code中生成一个WPF Path对象.
在XAML中,我可以这样做:
<Path Data="M 100,200 C 100,25 400,350 400,175 H 280">
Run Code Online (Sandbox Code Playgroud)
我怎样才能在Code中做同样的事情?
Path path = new Path();
Path.Data = "foo"; //This won't accept a string as path data.
Run Code Online (Sandbox Code Playgroud)
是否有可用将PathData转换为PathGeometry或类似字符串的类/方法?
当然不知何故XAML被解析并且数据字符串被转换了?
我需要解析Bezier Path Strings,但显然System.Windows.Media.Geometry
.Net CF框架中的版本没有Parse()
正常对应的方法.但是,输入以下XAML确实有效,因此系统必须有一种解析Path Data String的方法.
<Path Stroke="Blue" Data="M 0 0 Q 10 10 20 0"/>
有关如何使用XAML外部的自定义字符串启动此解析的任何线索?
我当然也可以尝试使用正则表达式来编写我自己的解析器,但我不想自己处理它,因为框架显然能够实现它.
更新
当使用建议的XAMLReader时,当我将StrokeThickness设置为新创建时,我得到一个奇怪的异常Path
:
path.StrokeThickness = strokeWidth; //ArgumentException ??? (strokeWidth = 6)
Run Code Online (Sandbox Code Playgroud)
当我使用我的手动解析器更改代码路径以进行渲染时,一切正常.我在这里错过了什么吗?除解析器外没有任何变化.
手动生成数据:
//"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); …
Run Code Online (Sandbox Code Playgroud) 我想要由LineSegment组成的PathGeometry.
所以,我使用第一个代码,但它是错误的.
PathGeometry temp = (PathGeometry)Geometry.Parse(
"<PathGeometry.Figures>" +
"<PathFigure StartPoint=\"193.5,283.5\" IsClosed=\"True\">" +
"<PathFigure.Segments>" +
"<LineSegment Point=\"418.5,283.5\" />" +
"<LineSegment Point=\"418.5,508.5\" />" +
"<LineSegment Point=\"193.5,508.5\" />" +
"<LineSegment Point=\"193.5,283.5\" />" +
"</PathFigure.Segments>" +
"</PathFigure>" +
"</PathGeometry.Figures>");
Run Code Online (Sandbox Code Playgroud)
如果我使用第二个代码,它不是错误,但它不包含LineSegment.结果将是PolyLineSegment,但我想要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");
Run Code Online (Sandbox Code Playgroud)
如何将XAML PathGeometry转换为WPF PathGeometry?
谢谢
在不同平台上渲染矢量图形时,SVG和SVG路径格式非常有效.但目前我在通用Windows平台上实现这一目标的挑战.我有一个给定的路径(取自SVG文件),例如:
M 198.09375 723.80859 C 177.18295 774.80866 156.88493 827.84014 140.58594 884.89844 L 140.72461 885.21875 L 142.49609 885.21875 C 161.1353 855.01082 143.6824 808.69757 193.58008 822.50977 C 220.7388 819.58475 192.23555 868.86205 206.17383 873.92578 C 203.13499 858.15989 212.17478 843.34361 213.20312 827.64648 C 216.4534 822.98862 226.9422 827.32963 232.86719 826.05078 C 239.35348 827.82466 259.48464 823.52777 253.90234 835.38867 C 252.16143 848.23286 247.39181 868.36181 258.57812 876.86133 C 275.17557 871.67116 293.30624 867.51489 306.24805 855.00195 C 309.22224 855.27087 320.1309 878.89646 334.30078 869.88281 C 342.81953 864.33463 353.03187 845.67608 358.37891 844.69922 …
Run Code Online (Sandbox Code Playgroud)