2009-08-26 6 views

Répondre

0

J'ai été en mesure d'obtenir une solution partielle en ajoutant une toile avec un bloc de texte à l'intérieur pour contenir mon texte. Comme ça ...

<Grid> 
    <Canvas> 
     <TextBlock Name="txtblkTip" TextAlignment="Center" Padding="2" /> 
    </Canvas> 
    <Viewport3d ... 
     ... 
    </Viewport3d> 
</Grid> 

Ensuite, lorsque l'utilisateur déplace la souris sur un objet dans Viewport3D J'utilise le gestionnaire d'événements de souris après pour redessiner l'info-bulle à l'endroit voulu, selon la méthode HitTest.

Private Sub viewport_PreviewMouseMove(ByVal sender As Object, ByVal e As       System.Windows.Input.MouseEventArgs) Handles viewport.PreviewMouseMove 

    Dim ptMouse As Point = e.GetPosition(viewport) 
    Dim result As HitTestResult = VisualTreeHelper.HitTest(viewport, ptMouse) 

    If TypeOf result Is RayMeshGeometry3DHitTestResult Then 

     Dim result3d As RayMeshGeometry3DHitTestResult = CType(result, RayMeshGeometry3DHitTestResult) 
     If TypeOf result3d.VisualHit Is Sphere Then 
      If CType(result3d.VisualHit, Sphere).Name <> "" Then 
       'Position the Canvas near the mouse pointer 
       Canvas.SetLeft(txtblkTip, ptMouse.X + 12) 
       Canvas.SetTop(txtblkTip, ptMouse.Y + 12) 
       txtblkTip.Text = CType(result3d.VisualHit, Sphere).Name 
      End If 
     End If 
    End If 
End Sub 

Une chose que je ne l'ai pas été en mesure d'obtenir est un événement lorsque la souris se déplace de tous les objets dans la fenêtre d'affichage, pour enlever l'info-bulle, mais je soupçonne que cela pourrait se faire avec un story-board.

J'espère que cela vous aidera tout au long du processus.

0

La réponse de XamTrix fonctionne avec l'ajout d'un gestionnaire d'événement MouseLeave qui définit la visibilité du bloc de texte sur Visibility.Collapsed (la visibilité du bloc de texte doit également être réinitialisée à Visible dans le gestionnaire d'événements PreviewMouseMove).

De même, si le Canevas est placé après le Viewport3d au lieu de le précéder, le bloc de texte apparaîtra au-dessus des éléments Viewport3d. Dans ce cas, l'instruction Canvas.SetLeft doit être remplacée par: ptMouse.X + 12 - viewport3d.actualWidth.

Questions connexes