2009-08-26 38 views

回答

0

我能夠通過添加一個帶有文本塊的畫布來獲得部分解決方案來保存我的文本。像這樣...

<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 

有一件事我一直沒能得到的是一個事件,當鼠標移開在視窗中的所有對象,刪除工具提示,但我懷疑這可能是與故事板來完成。

希望這可以幫助你一路走來。

0

XamTrix的答案的工作原理與另外那臺正文塊來Visibility.Collapsed知名度mouseLeave事件處理程序(TextBlock的知名度 也必須重新設置爲可見在PreviewMouseMove事件處理程序)。另外,如果Canvas放置在Viewport3d之後而不是之前,則文本塊 將出現在Viewport3d元素的上方。在這種情況下,Canvas.SetLeft語句 應該更改爲:ptMouse.X + 12 - viewport3d.actualWidth。