Přidání popisku do ViewPort3D podřízených elementů

hlasů
0

Dobrý den chtěl bych se přidat Tool Tip na ViewPort3D podřízené elementy, když jsem dal můj kurzor myši na něj, jen viewPort3D má vlastnost popisku, ale ne pro jejich Childs. Nějaký způsob, jak jej vyřešit?

Položena 27/08/2009 v 00:33
zdroj uživatelem
V jiných jazycích...                            


2 odpovědí

hlasů
0

XamTrix odpověď pracuje s přidáním psovoda mouseLeave události, která nastavuje viditelnost TextBlock, ke Visibility.Collapsed (zviditelnění TextBlock třeba obnovit, aby Visible v obsluze události PreviewMouseMove).

Také v případě, že plátno je umístěn za Viewport3d místo před ním, TextBlock objeví nad prvky Viewport3d. V takovém případě by mělo být prohlášení Canvas.SetLeft změněn na: ptMouse.X +12 - viewport3d.actualWidth.

Odpovězeno 18/02/2013 v 20:33
zdroj uživatelem

hlasů
0

Byl jsem schopen se dostat částečné řešení přidáním plátno s TextBlock uvnitř uspořádat svůj text. Takhle...

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

Pak, když se uživatel pohybuje myší na objektu v viewport3d I použít následující obslužné rutiny události myši pro překreslování popisku na požadované místo, na základě způsobu 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

Jedna věc, kterou jsem nebyl schopen dostat je událost, když se myš přesune mimo všechny objekty ve výřezu pro odstranění popisku, ale myslím, že by to mohlo být provedeno s scénáře.

Doufám, že to pomůže vám na cestě.

Odpovězeno 12/02/2010 v 13:47
zdroj uživatelem

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