我想在Code中生成一个WPF Path对象。
在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.
是否有类/方法可以将带有PathData的字符串转换为PathGeometry或类似字符串?
当然,XAML会被解析并转换数据字符串吗?
答案 0 :(得分:129)
var path = new Path();
path.Data = Geometry.Parse("M 100,200 C 100,25 400,350 400,175 H 280");
Path.Data是Geometry类型。使用 Reflector JustDecompile (eff Red Gate),我查看了Geometry的定义,因为它的TypeConverterAttribute(xaml序列化程序用来将类型string
的值转换为Geometry
)。这指向了GeometryConverter。检查实现,我看到它使用Geometry.Parse
将路径的字符串值转换为Geometry实例。
答案 1 :(得分:20)
您可以使用绑定机制。
var b = new Binding
{
Source = "M 100,200 C 100,25 400,350 400,175 H 280"
};
BindingOperations.SetBinding(path, Path.DataProperty, b);
我希望它可以帮到你。
答案 2 :(得分:3)
从原始文本字符串创建几何体您可以将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;
}