我正在尝试创建一个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,因为它们几乎相同?
由于
答案 0 :(得分:0)
我不认为有一种方法可以按照标题建议的方式使用资源,因为你只能指定一次绑定。
但是,您可以编写一个派生自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来设置所包含的变换的所有其他部分。
如果你真的只是两次这样做,它并没有为你节省很多,但如果你多次这样做,那可能是值得的。