将几何转换为wpf中的路径(使用混合?)

时间:2010-12-14 08:24:49

标签: wpf xaml path geometry blend

我的问题很简单。

我该如何转换此代码:

<Path>
    <Path.Data>
        <EllipseGeometry Center="5,4" RadiusX="4" RadiusY="4"/>
    </Path.Data>
</Path>

类似

<Path Data="M 0 5 L 3 10 10 0"/>

(请注意,第二个产生一个复选标记,而不是一个椭圆形。它仅用于说明目的,我的目标只是:找到一个椭圆的序列)

编辑:我还阅读了关于xaml中Bezier曲线的文档,并且我完全清楚我可以通过计算Bezier曲线的精确点来生成正确的代码以获得椭圆,但我不想去自己做这个计算的麻烦,所以我想知道是否有一个简单的方法来做这个(在混合中)或者

1 个答案:

答案 0 :(得分:8)

这显示了如何从代码中执行此操作。我不确定这是否会解决你的问题 - 你说“混合?”在标题中,我不知道在Blend中这样做的方法。但我希望这可能有所帮助。

第一步是将EllipseGeometry转换为PathGeometry

var geom = new EllipseGeometry(new Point(5, 4), 4, 4);
var pathGeometry = PathGeometry.CreateFromGeometry(geom);

获得PathGeometry之后,您只需致电ToString,它就会为您提供字符串代表:

string pathText = pathGeometry.ToString();

在我的系统上,这会生成以下相当冗长的文本:

“M9,4C9,6.20913899932317 7.20913899932317,8 5,8 2.79086100067683,8 1,6.20913899932317 1,4 1,1709086100067683 2.79086100067683,0 5,0 7.20913899932317,0 9,1.79086100067683 9,4z”

现在,如果你想要将这个字符串输入到Xaml中,那么你最终会得到的就是你需要的一个步骤,因为你提供的形式是Xaml:

<Path Data="M 0 5 L 3 10 10 0"/>

不会产生PathGeometry。它产生一个StreamGeometry,这是一个稍微有效但固定的路径表示。 (主要区别在于你无法掌握代表StreamGeometry中各种数字和部分的单个对象,而你可以使用PathGeometryStreamGeometry更便宜,作为结果。)

您可以从路径文字中获取StreamGeometry

var streamGeometry = StreamGeometry.Parse(pathText);

然后如果你想在Path中建立它:

var p = new Path { Data = streamGeometry };

根据您的确切目标,可能会有更有效的方法来执行此操作。 (StreamGeometry是一种更有效的表示形式,因为它最终会创建更少的对象。但是我的代码到达该表示的路径效率不高,所以你可能最好只停留{{1}第一个代码片段产生的。或者,如果您的目标只是获取路径文本,那么PathGeometry也足以满足您的需求。)