Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
WPF C#Path:如何从包含路径数据的字符串获取代码中的几何体(而不是XAML)_C#_Wpf_Path - Fatal编程技术网

WPF C#Path:如何从包含路径数据的字符串获取代码中的几何体(而不是XAML)

WPF C#Path:如何从包含路径数据的字符串获取代码中的几何体(而不是XAML),c#,wpf,path,C#,Wpf,Path,我想在代码中生成一个WPF路径对象 在XAML中,我可以这样做: <Path Data="M 100,200 C 100,25 400,350 400,175 H 280"> 是否有可用的类/方法将包含PathData的字符串转换为PathGeometry或类似的类/方法 确实,XAML会被解析,数据字符串会被转换吗 var path = new Path(); path.Data = Geometry.Parse("M 100,200 C 100,25 400,350 400,

我想在代码中生成一个WPF路径对象

在XAML中,我可以这样做:

 <Path Data="M 100,200 C 100,25 400,350 400,175 H 280">
是否有可用的类/方法将包含PathData的字符串转换为PathGeometry或类似的类/方法

确实,XAML会被解析,数据字符串会被转换吗

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

路径。数据类型为几何体。使用Reflector JustDecompile(eff Red Gate),我查看了其TypeConverterAttribute的几何体定义(xaml序列化程序使用它将
字符串类型的值转换为
几何体
)。这让我想到了几何变换器。查看实现时,我看到它使用了
Geometry.Parse
将路径的字符串值转换为一个Geometry实例。

您可以使用绑定机制

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

我希望它能帮助您。

要从原始文本字符串生成几何图形,可以使用System.Windows.Media.FormattedText类和BuildGeometry()方法


嗯,我花了一分钟在谷歌上搜索答案,但没有找到任何合理的答案。因此,在这种情况下(必须存在简单的解决方案),我浏览了一下代码。我知道WPF是如何从字符串转变为复杂类型的,所以我遵循了这一思路。理解这个过程对于知道答案来说是第二重要的。@Peterdk:WP7中有替代方案吗?WP7路径如何将字符串转换为几何体?@将看到@Nasenbaer:这很不幸。如果您按照与我相同的步骤确定如何在桌面WPF应用程序上执行此操作,您可以找到应用商店应用程序的答案。事实证明,您必须对Windows应用商店和手机应用程序执行此操作
Geometry.Parse
位于该配置文件不支持的命名空间中。
var b = new Binding
{
   Source = "M 100,200 C 100,25 400,350 400,175 H 280"
};
BindingOperations.SetBinding(path, Path.DataProperty, b);
 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;
    }