2011-05-15 40 views
0

我正在嘗試創建一個3d場景來以圖形方式表示我的模型。 我的模型包含N個對象(objA,objB,...),每個對象派生自一個抽象類,它具有像Position,With,Height,Length等屬性。是否可以在資源字典中添加一個帶綁定的Transform3DGroup?

此刻我的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

我不認爲有一種方法與資源做你的標題所暗示的方式,因爲你只可以指定要綁定一次。

但是,您可以編寫一個派生自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來設置所有其他件包括變換。

如果你真的只是這樣做了兩次,它並不能爲你節省很多,但如果你做了很多次,這可能是值得的。

+0

由於Transform3DGroup是不可能從密封類派生的 – Roberto 2011-05-15 16:07:38

相關問題