【问题标题】:Why can't I define a Geometry with a Transform in XAML?为什么我不能在 XAML 中使用变换定义几何?
【发布时间】:2013-08-05 11:35:19
【问题描述】:

我正在尝试创建一个 ResourceDictionary á la this 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 代码中对几何图形应用转换?还是我只需要通过代码来完成?

【问题讨论】:

    标签: c# wpf xaml pathgeometry


    【解决方案1】:

    你可以这样写:

    <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 怎么样?另外,为什么我会出现这种行为?
    • XAML 中的StreamGeometry 只能在不设置任何属性的情况下编写,例如&lt;StreamGeometry&gt;...&lt;/StreamGeometry&gt;。我猜这是因为 StreamGeometry 实例是由内置的 TypeConverter 直接创建的,它可以转换路径字符串。这不同于例如读取 PathGeometry 的 Figures 属性。
    【解决方案2】:

    关于StreamGeometry的行为,引用自MSDN

    这里:

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

    这里:

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

    因此,按照@Clemens 的建议,使用PathGeomerty

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-01-14
      • 2011-01-05
      • 2021-03-30
      • 2015-07-22
      • 2021-08-04
      • 1970-01-01
      相关资源
      最近更新 更多