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


72

我想在代码中生成WPF Path对象。

在XAML中,我可以这样做:

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

如何在Code中做同样的事情?

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

是否有可用的类/方法将带PathData的字符串转换为PathGeometry或类似的字符串?

当然可以以某种方式解析XAML并转换数据字符串吗?

Answers:


138
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),我查看了其TypeConverterAttribute的Geometry定义(xaml序列化程序用于将type的值转换stringGeometry)。这使我指向了GeometryConverter。在检查实现时,我看到它用于Geometry.Parse将路径的字符串值转换为Geometry实例。


好吧,我花了一分钟时间在Google上搜索了答案,但没有找到任何合理的答案。因此,在这种情况下(必须存在简单的解决方案),我偷看了代码。知道WPF如何从字符串转换为复杂类型后,我开始学习。了解过程是了解答案的第二重要。

@Peterdk:WP7中有替代方法吗?WP7路径如何将字符串转换为几何?


@Nasenbaer:不幸的是。如果按照与我相同的步骤来确定如何在桌面WPF应用程序上完成操作,则可以找到商店应用程序的答案。

20

您可以使用绑定机制。

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

希望对您有帮助。


3
原来,您必须对Windows Store和Phone应用程序执行此操作。Geometry.Parse在该配置文件不支持的名称空间中。
Travis

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;
    }
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.