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序列化器用于将string
types的值转换为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; }