2010-09-22 12 views
3

J'affiche quelques modèles 3D en tant que Model3DGroups. Ils sont entourés par Viewport3D qui attrape les événements MouseDown.WPF: Comment monter l'arbre Visual pour trouver un Model3DGroup sur lequel est cliqué un modèle 3D?

Je veux déterminer quel Model3DGroup (ils ont tous des noms) a été cliqué. Je commence par ceci:

 Point location = e.GetPosition(karte.ZAM3DViewport3D); 
     HitTestResult hitResult = VisualTreeHelper.HitTest(karte.ZAM3DViewport3D, location); 

     if (hitResult != null) 
     { 
      Debug.WriteLine("BREAKPOINT"); 
      // Hit the visual. 
     } 

Après avoir atteint le point d'arrêt défini à la commande WriteLine-je regarde la vue locale de trouver la variable à droite mais ne peut pas le trouver. Pouvez-vous m'aider sur le chemin que je dois suivre pour trouver le groupe auquel appartient le modelvisual3d?

Voici une capture d'écran de l'arbre: alt text

Répondre

1

Je l'ai fait en entourant le Model3DGroup avec un ModelUIElement3D.

<ModelUIElement3D MouseDown="ModelUIElement3D_MouseDown" x:Name="LogoMouseDown"> 

la MouseDown fonction il gère cette façon:

private void ModelUIElement3D_MouseDown(object sender, MouseButtonEventArgs e) 
    { 

      if (sender == trololo) 
      { 
       RaiseModelClickEvent("auditorium");  
      } 
      else if (sender == LogoMouseDown) 
      { 
       RaiseModelClickEvent("logo"); 
      } 

    } 
1

Vous pouvez utiliser Linq to Visual Tree car il n'a pas d'importance si l'élément du nom que vous recherchez est Model3DGroup. C'est juste un autre objet de dépendance (si je comprends votre question).

type de résultat Vérifiez puis LinqToVT pour remonter, récupérer son prédécesseur XAML:

hitResult.VisualHit.GetType() == typeof(ModelVisual3D) 
+0

J'évité LINQ jusqu'à aujourd'hui, mais je suppose que son temps de travailler avec elle. Je pourrais utiliser une solution de contournement pour mon problème en encapsulant un Model3DGroup dans un ModelUIElement3D qui peut également déclencher des événements de souris. – Hedge

Questions connexes