Мне удалось получить частичное решение, добавив холст с текстовым блоком внутри для хранения моего текста. Вот так ...
<Grid>
<Canvas>
<TextBlock Name="txtblkTip" TextAlignment="Center" Padding="2" />
</Canvas>
<Viewport3d ...
...
</Viewport3d>
</Grid>
Затем, когда пользователь наводит указатель мыши на объект в viewport3d, я использую следующий обработчик событий мыши, чтобы перерисовать подсказку в нужном месте на основе метода 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
Одна вещь, которую я не смог получить, это событие, когда мышь перемещает все объекты в окне просмотра, чтобы удалить подсказку, но я подозреваю, что это можно сделать с раскадровкой.
Надеюсь, это поможет вам на этом пути.