为什么我不能在XAML中使用Transform定义一个Geometry?

3

我正在尝试创建一个类似于这个答案ResourceDictionary,其中包含设置了TransformsStreamGeometries

<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 代码中对几何图形应用变换?还是我只能通过代码来实现它?

2个回答

7
你可以这样写:

你可以像这样编写:

<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>

StreamGeometry 怎么样?另外,我为什么会得到这种行为? - Kian
1
在 XAML 中,StreamGeometry 只能在不设置任何属性的情况下编写,例如 <StreamGeometry>...</StreamGeometry>。我猜这是因为 StreamGeometry 实例直接由内置 TypeConverter 创建,该转换器将路径字符串转换为图形。这与读取 PathGeometry 的 Figures 属性不同。 - Clemens

3
关于StreamGeometry的行为,引用自MSDN

在这里:

StreamGeometry是可冻结类型。 StreamGeometry是创建几何形状的轻量级替代方案。 当您需要描述复杂几何图形但不希望支持数据绑定、动画或修改时,请使用StreamGeometry。 由于其效率,StreamGeometry类是描述装饰器的良好选择。

并且在这里:

如果StreamGeometry包含变换或任何非描边或未填充线段,则无法对其进行序列化。

因此,建议像@Clemens一样使用PathGeometry

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接