Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Wpf 向ViewPort3D子元素添加工具提示_Wpf_3d_Tooltip - Fatal编程技术网

Wpf 向ViewPort3D子元素添加工具提示

Wpf 向ViewPort3D子元素添加工具提示,wpf,3d,tooltip,Wpf,3d,Tooltip,您好,当我将鼠标放在ViewPort3D子元素上时,我想将工具提示添加到ViewPort3D子元素,只有ViewPort3D具有工具提示属性,但不适用于其子元素。有什么办法解决这个问题吗?我通过添加一个内部带有文本块的画布来保存我的文本,从而获得了部分解决方案。像这样 <Grid> <Canvas> <TextBlock Name="txtblkTip" TextAlignment="Center" Padding="2" />

您好,当我将鼠标放在ViewPort3D子元素上时,我想将工具提示添加到ViewPort3D子元素,只有ViewPort3D具有工具提示属性,但不适用于其子元素。有什么办法解决这个问题吗?

我通过添加一个内部带有文本块的画布来保存我的文本,从而获得了部分解决方案。像这样

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


XamTrix的答案与添加的MouseLeave事件处理程序一起工作,该处理程序将textblock的可见性设置为visibility.Collapsed(textblock的可见性) 还必须重置为在PreviewMouseMove事件处理程序中可见)

此外,如果画布放置在Viewport3d之后而不是之前,则textblock 将显示在Viewport3d元素上方。在本例中,Canvas.SetLeft语句 应更改为:ptMouse.X+12-viewport3d.actualWidth

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