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