2009-03-26 11 views
1

Je me demande si quelqu'un sait s'il est possible en XAML d'avoir une ListBox dont DataTemplate définit ListBoxItem comme un élément 3d. Quelque chose dans le style de:Éléments 3D en tant qu'éléments dans un ListBox WPF

   <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> 

Quelqu'un a vu ce genre de chose fait/avez-vous des conseils?

Très apprécié, bv

Répondre

0

Remplacer le bouton avec un contrôle de contenu tel que,

 
    <ContentControl Content="{Binding}" /> 
Il ressemble également à la Viewpord3D ne demande pas d'espace de mise en page, donc je besoin de l'envelopper dans un <Grid Height="100" Width="100">...</Grid> pour voir quelque chose.

+0

Merci à vous (et Cameron, dont les conseils ont été très utiles). Je déteste toujours le sentiment que quelque chose fonctionne et ne comprend pas entièrement pourquoi. Je préférerais plutôt jeter une exception! Merci encore. –

0

Il y a deux façons de le faire.

Vous pouvez modifier le DataTemplate en ControlTemplate et l'appliquer à tous les éléments de la ListBox. Mais vous ne pouvez pas le lier à un type de données spécifique.

L'autre option consiste à déplacer le DataTemplate dans une section de ressources et à définir le DataType sur le type de l'élément que vous souhaitez afficher. Ensuite, vous pouvez utiliser la liaison pour se lier à une propriété de l'objet, etc.

+0

Je pense avoir essayé ces deux options, et rien ne s'affiche, bien que la collection Items soit remplie. Pourriez-vous me montrer ce que vous voulez dire? –