Ajout d'info-bulle aux éléments de l'enfant Viewport3D

voix
0

Salut, je voudrais ajouter à infobulle Viewport3D éléments enfants quand je mets ma souris sur dessus, seul Viewport3D possède une propriété infobulle mais pas pour leurs Childs. De toute façon de travailler autour d'elle?

Créé 27/08/2009 à 00:33
source utilisateur
Dans d'autres langues...                            


2 réponses

voix
0

La réponse de XamTrix fonctionne avec l'ajout d'un gestionnaire d'événements MouseLeave qui définit la visibilité du TextBlock Visibility.Collapsed (la visibilité du textblock doit également être remis à zéro Visible dans le gestionnaire d'événements PreviewMouseMove).

En outre, si la toile est placée après la Viewport3D au lieu de devant elle, la textblock apparaîtra au-dessus des éléments Viewport3D. Dans ce cas, la déclaration Canvas.SetLeft doit être remplacé par: ptMouse.X + 12 - viewport3d.actualWidth.

Créé 18/02/2013 à 20:33
source utilisateur

voix
0

Je suis en mesure d'obtenir une solution partielle en ajoutant une toile avec un textblock intérieur pour tenir 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'utiliser le gestionnaire d'événement de souris suivant pour redessiner la bulle à l'endroit souhaité, sur la base de 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.

Espérons que cela vous aide le long du chemin.

Créé 12/02/2010 à 13:47
source utilisateur

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more