Добавление всплывающей подсказки к дочерним элементам ViewPort3D - PullRequest
0 голосов
/ 27 августа 2009

Привет, я хотел бы добавить подсказку к дочерним элементам ViewPort3D, когда наведу на нее указатель мыши. Только viewPort3D имеет свойство всплывающей подсказки, но не для их дочерних элементов. Есть ли способ обойти это?

Ответы [ 2 ]

0 голосов
/ 18 февраля 2013

Ответ XamTrix работает с добавлением обработчика события MouseLeave, который устанавливает видимость текстового блока в Visibility.Collapsed (видимость текстового блока также необходимо сбросить на Visible в обработчике PreviewMouseMove).

Кроме того, если Canvas находится после Viewport3d, а не перед ним, текстовый блок появится над элементами Viewport3d. В этом случае оператор Canvas.SetLeft должно быть изменено на: ptMouse.X + 12 - viewport3d.actualWidth.

0 голосов
/ 12 февраля 2010

Мне удалось получить частичное решение, добавив холст с текстовым блоком внутри для хранения моего текста. Вот так ...

<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

Одна вещь, которую я не смог получить, это событие, когда мышь перемещает все объекты в окне просмотра, чтобы удалить подсказку, но я подозреваю, что это можно сделать с раскадровкой.

Надеюсь, это поможет вам на этом пути.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...