WPF C#路径:如何从代码中的路径数据到几何的字符串(不在XAML中)

时间:2010-01-08 18:13:59

标签: c# wpf path

我想在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会被解析并转换数据字符串吗?

3 个答案:

答案 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;
    }