Можно ли поместить в словарь ресурсов Transform3DGroup с привязкой? - PullRequest
0 голосов
/ 15 мая 2011

Я пытаюсь создать трехмерную сцену для графического представления моей модели.Моя модель содержит 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>

Можно ли избежать перезаписи Transform3DGroup для каждой ModelVisual3D, учитывая, что они почти одинаковы?

Спасибо

1 Ответ

0 голосов
/ 15 мая 2011

Я не думаю, что есть способ сделать это с ресурсами так, как предлагает ваш заголовок, потому что вы сможете указать привязку только один раз.

Тем не менее, вы можете написать класс, который наследуется от 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, чтобы установить все остальные части включенных преобразований.

Это не спасет вас много, если вы действительно делаете это дважды, но если вы делаете это много раз, это может стоить этого.

...