3d元素作为WPF ListBox中的项目

时间:2009-03-26 21:40:30

标签: wpf 3d datatemplate

我想知道是否有人知道在XAML中是否有可能有一个ListBox,其DataTemplate将ListBoxItem定义为3d元素。有点像:

                <ListBox x:Name="lst3D" HorizontalAlignment="Stretch" VerticalAlignment="Stretch">
                <ListBox.ItemTemplate>
                    <DataTemplate>
                        <Viewport3D>
                            <Viewport2DVisual3D>
                                <Viewport2DVisual3D.Transform>
                                    <RotateTransform3D>
                                        <RotateTransform3D.Rotation>
                                            <AxisAngleRotation3D Angle="40" Axis="0, 1, 0" />
                                        </RotateTransform3D.Rotation>
                                    </RotateTransform3D>
                                </Viewport2DVisual3D.Transform>
                                <Viewport2DVisual3D.Geometry>
                                    <MeshGeometry3D Positions="-1,1,0 -1,-1,0 1,-1,0 1,1,0"
                        TextureCoordinates="0,0 0,1 1,1 1,0" 
                        TriangleIndices="0 1 2 0 2 3"/>
                                </Viewport2DVisual3D.Geometry>
                                <Viewport2DVisual3D.Material>
                                    <DiffuseMaterial Viewport2DVisual3D.IsVisualHostMaterial="True" Brush="AliceBlue"/>
                                </Viewport2DVisual3D.Material>

                                <Label>Hello, 3D</Label> // we'd like to databind controls like this one

                            </Viewport2DVisual3D>
                        </Viewport3D>
                    </DataTemplate>
                </ListBox.ItemTemplate>
                <ListBoxItem />
                <ListBoxItem />
                <ListBoxItem />
            </ListBox>

有人看过这样的事情/有什么建议吗?

非常感谢, BV

2 个答案:

答案 0 :(得分:0)

有几种方法可以做到这一点。

您可以将DataTemplate更改为ControlTemplate,并将其应用于ListBox中的所有项目。但是您无法将其绑定到特定的数据类型。

另一个选项是将DataTemplate移动到资源部分,并将DataType设置为您希望显示的项目的类型。然后,您可以使用绑定绑定到项目的属性等。

答案 1 :(得分:0)

用内容控件替换按钮,例如

  <ContentControl Content="{Binding}" />
它看起来似乎Viewpord3D没有请求布局空间,所以我需要将它包装在<Grid Height="100" Width="100">...</Grid>中以查看任何内容。