为什么我不能在XAML中使用Transform定义几何?

时间:2013-08-05 11:35:20

标签: c# wpf xaml pathgeometry

我正在尝试创建一个ResourceDictionaryálathis answer,其中包含StreamGeometries设置的Transforms

<ResourceDictionary>
    <StreamGeometry x:Name="Chevrons">
        <StreamGeometry.Transform>
            <TranslateTransform X="20" Y="120"/>
        </StreamGeometry.Transform>
        M21.750001,94.749999 L34.000002,117.66218 30.625003,133.62501 17 [...]
    </StreamGeometry>
</ResourceDictionary>

但是,我收到以下错误:

  

1:无法向“StreamGeometry”类型的对象添加内容。

  

2:处理初始化字符串' {PathData} '时遇到TypeConverter语法错误。通过TypeConverter创建的对象不允许使用元素属性。

所以我用PathGeometry尝试了它并得到了这个错误:

  

无法将指定的值分配给集合。期望以下类型:“PathFigure”。

有没有办法在XAML代码中将变换应用于Geometry?或者我只需通过代码来完成它?

2 个答案:

答案 0 :(得分:8)

您可以这样写:

<PathGeometry x:Key="Chevrons">
    <PathGeometry.Transform>
        <TranslateTransform X="20" Y="120"/>
    </PathGeometry.Transform>
    <PathGeometry.Figures>
        M21.750001,94.749999 L34.000002,117.66218 30.625003,133.62501 ...
    </PathGeometry.Figures>
</PathGeometry>

或者像这样:

<PathGeometry x:Key="Chevrons"
    Figures="M21.750001,94.749999 L34.000002,117.66218 30.625003,133.62501 ...">
    <PathGeometry.Transform>
        <TranslateTransform X="20" Y="120"/>
    </PathGeometry.Transform>
</PathGeometry>

答案 1 :(得分:3)

关于StreamGeometry的行为,引自MSDN

下面:

  

StreamGeometry是一种Freezable类型。 StreamGeometry是PathGeometry的轻量级替代品,用于创建几何形状。当您需要描述复杂几何体但不希望支持数据绑定,动画或修改的开销时,请使用StreamGeometry。由于其效率,StreamGeometry类是描述装饰者的不错选择。

在这里:

  

如果StreamGeometry包含Transform或任何非描边或未填充的段,则无法序列化。

因此,请使用PathGeomerty,如@Clemens所述。