首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >向ViewPort3D子元素添加ToolTip

向ViewPort3D子元素添加ToolTip
EN

Stack Overflow用户
提问于 2009-08-26 23:33:28
回答 2查看 1.6K关注 0票数 0

您好,我想添加工具提示到ViewPort3D子元素当我把我的鼠标放在它上面,只有viewPort3D有一个工具提示属性,但没有为他们的孩子。有什么办法解决这个问题吗?

EN

回答 2

Stack Overflow用户

发布于 2010-02-12 20:47:05

我能够通过添加一个包含文本块的画布来保存文本,从而获得部分解决方案。像这样..。

代码语言:javascript
运行
复制
<Grid>
    <Canvas>
        <TextBlock Name="txtblkTip" TextAlignment="Center" Padding="2" />
    </Canvas>
    <Viewport3d ... 
        ...
    </Viewport3d>
</Grid>

然后,当用户将鼠标移到viewport3d中的对象上时,我使用以下鼠标事件处理程序根据HitTest方法在所需位置重绘工具提示。

代码语言:javascript
运行
复制
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

有一件事我还没能得到,那就是当鼠标移出视口中的所有对象时,移除工具提示的事件,但我怀疑这可以用故事板来完成。

希望这篇文章能对你有所帮助。

票数 0
EN

Stack Overflow用户

发布于 2013-02-19 03:33:18

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

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1338142

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档