Adicionando dica de ferramenta para elementos filhos Viewport3D

votos
0

Oi eu gostaria de adicionar Dica da ferramenta para Viewport3D elementos filhos quando eu coloco o meu mouse sobre nele, Só Viewport3D tem uma propriedade dica mas não para seus criança. Qualquer maneira de contornar isso?

Publicado 27/08/2009 em 00:33
fonte usuário
Em outras línguas...                            


2 respostas

votos
0

A resposta de XamTrix trabalha com a adição de um manipulador de eventos MouseLeave que define a visibilidade do textblock para Visibility.Collapsed (a visibilidade da textblock também deve ser reposto para Visível no manipulador de eventos PreviewMouseMove).

Além disso, se a tela é colocada após o Viewport3D em vez de antes, o textblock aparecerá acima dos elementos Viewport3D. Neste caso, a declaração Canvas.SetLeft deve ser alterada para: ptMouse.X + 12 - viewport3d.actualWidth.

Respondeu 18/02/2013 em 20:33
fonte usuário

votos
0

Eu era capaz de conseguir uma solução parcial, adicionando uma tela com uma textblock dentro para segurar o meu texto. Como isso...

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

Então, como o usuário move o mouse sobre um objeto em Viewport3D eu uso o seguinte manipulador de eventos do mouse para redesenhar a dica de ferramenta no local pretendido, com base no método 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

Uma coisa que eu não tenho sido capaz de obter é um evento quando o mouse se move fora todos os objetos na janela de visualização, para remover a dica, mas eu suspeito que isso poderia ser feito com um storyboard.

Espero que isso ajude você ao longo do caminho.

Respondeu 12/02/2010 em 13:47
fonte usuário

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