【问题标题】:Is it possible to put in a resource dictionary a Transform3DGroup with binding?是否可以将具有绑定的 Transform3DGroup 放入资源字典中?
【发布时间】:2011-05-15 09:53:21
【问题描述】:

我正在尝试创建一个 3d 场景来以图形方式表示我的模型。 我的模型包含 N 个对象(objA、objB、...),每个对象都派生自一个抽象类,该类具有诸如 Position、With、Height、Length 等属性

目前我的 Viewport3D 是这样完成的:

<Viewport3D>
    ...
    <ModelVisual3D Content="{StaticResource objAView}">
        <ModelVisual3D.Transform>
            <Transform3DGroup>
                <ScaleTransform3D ScaleX="{Binding Path=objA.Width}" ScaleY="{Binding Path=objA.Height}" ScaleZ="{Binding Path=objA.Length}"/>
                <TranslateTransform3D OffsetX="{Binding Path=objA.Position.X}" OffsetY="{Binding Path=objA.Position.Y}" OffsetZ="{Binding Path=objA.Position.Z}"/>
            </Transform3DGroup>
        </ModelVisual3D.Transform>
    </ModelVisual3D>
    <ModelVisual3D Content="{StaticResource objBView}">
        <ModelVisual3D.Transform>
            <Transform3DGroup>
                <ScaleTransform3D ScaleX="{Binding Path=objB.Width}" ScaleY="{Binding Path=objB.Height}" ScaleZ="{Binding Path=objB.Length}"/>
                <TranslateTransform3D OffsetX="{Binding Path=objB.Position.X}" OffsetY="{Binding Path=objB.Position.Y}" OffsetZ="{Binding Path=objB.Position.Z}"/>
            </Transform3DGroup>
        </ModelVisual3D.Transform>
    </ModelVisual3D>
    ...
</Viewport3D>

如果它们几乎相同,是否可以避免为每个 ModelVisual3D 重写 Transform3DGroup?

谢谢

【问题讨论】:

    标签: wpf data-binding 3d transform


    【解决方案1】:

    我认为没有办法按照您的标题建议的方式使用资源,因为您只能指定一次绑定。

    但是,您可以编写一个派生自 Transform3DGroup 的类,并采用 objA 和 obB 的单一绑定。所以你可以在你的代码中有这样的东西:

    <Viewport3D>
        ...
        <ModelVisual3D Content="{StaticResource objAView}">
            <ModelVisual3D.Transform>
                <custom:MyTransform3DGroup ObjectToBindAgainst="{Binding objA}" />
            </ModelVisual3D.Transform>
        </ModelVisual3D>
        <ModelVisual3D Content="{StaticResource objBView}">
            <ModelVisual3D.Transform>
                <custom:MyTransform3DGroup ObjectToBindAgainst="{Binding objB}" />
            </ModelVisual3D.Transform>
        </ModelVisual3D>
        ...
    </Viewport3D>
    

    然后在您的自定义类中,您可以使用 ObjectToBindAgainst 设置包含的所有其他部分的转换。

    如果你真的只是这样做两次,它不会为你节省很多,但如果你多次这样做,它可能是值得的。

    【讨论】:

    • 不可能从密封类派生,因为 Transform3DGroup 是
    猜你喜欢
    • 1970-01-01
    • 2012-03-20
    • 2023-04-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-01
    相关资源
    最近更新 更多