WPF的C#path:如何获得从path数据string中的代码(而不是在XAML)

我想要在代码中生成一个WPFpath对象。

在XAML中,我可以这样做:

<Path Data="M 100,200 C 100,25 400,350 400,175 H 280"> 

我如何在代码中做同样的事情?

  Path path = new Path(); Path.Data = "foo"; //This won't accept a string as path data. 

是否有一个类/方法可用,将string与PathData转换为PathGeometry或类似?

当然不知何故XAML得到parsing和数据string转换?

 var path = new Path(); path.Data = Geometry.Parse("M 100,200 C 100,25 400,350 400,175 H 280"); 

Path.Data是几何types的。 使用reflection器 JustDecompile (eff Red Gate) ,我查看了它的TypeConverterAttribute(xaml序列化器用于将stringtypes的值转换为Geometry )的Geometry 。 这指出我的GeometryConverter。 检查出实现,我看到它使用Geometry.Parse将path的string值转换为Geometry实例。

你可以使用绑定机制。

 var b = new Binding { Source = "M 100,200 C 100,25 400,350 400,175 H 280" }; BindingOperations.SetBinding(path, Path.DataProperty, b); 

我希望它可以帮助你。

从原始文本string中创build几何graphics您可以使用System.Windows.Media.FormattedText类和BuildGeometry()方法

  public string Text2Path() { FormattedText formattedText = new System.Windows.Media.FormattedText("Any text you like", CultureInfo.GetCultureInfo("en-us"), FlowDirection.LeftToRight, new Typeface( new FontFamily(), FontStyles.Italic, FontWeights.Bold, FontStretches.Normal), 16, Brushes.Black); Geometry geometry = formattedText.BuildGeometry(new Point(0, 0)); System.Windows.Shapes.Path path = new System.Windows.Shapes.Path(); path.Data = geometry; string geometryAsString = geometry.GetFlattenedPathGeometry().ToString().Replace(",",".").Replace(";",","); return geometryAsString; }