3

Model3DGroups としていくつかの 3D モデルを表示しています。これらは、MouseDown イベントをキャッチする Viewport3D に囲まれています。

どの Model3DGroup (すべてに名前があります) がクリックされたかを特定したいと考えています。私はこれから始めています:

        Point location = e.GetPosition(karte.ZAM3DViewport3D);
        HitTestResult hitResult = VisualTreeHelper.HitTest(karte.ZAM3DViewport3D, location);

        if (hitResult != null )
        {
            Debug.WriteLine("BREAKPOINT");
            // Hit the visual.
        }

WriteLine コマンドで設定されたブレークポイントに到達した後、適切な変数を見つけるためにローカル ビューを見ていますが、見つかりません。modelvisual3d が属しているグループを見つけるために必要なパスを教えてもらえますか?

ツリーのスクリーンショットは次のとおりです。 代替テキスト

4

2 に答える 2

1

Model3DGroup を ModelUIElement3D で囲むことでそれを行いました。

<ModelUIElement3D MouseDown="ModelUIElement3D_MouseDown" x:Name="LogoMouseDown">

MouseDown 関数は次のように処理します。

    private void ModelUIElement3D_MouseDown(object sender, MouseButtonEventArgs e)
    {

            if (sender == trololo)
            {
                RaiseModelClickEvent("auditorium");    
            }
            else if (sender == LogoMouseDown)
            {
                RaiseModelClickEvent("logo");
            }

    }
于 2010-09-26T09:46:08.030 に答える
1

探している名前付き要素が Model3DGroup であるかどうかは関係ないため、Linq to Visual Treeを使用できます。これは単なる別の依存オブジェクトです (私があなたの質問を理解していれば)。

結果の型を確認してから、LinqToVT を調べて、XAML の前任者を取得します。

hitResult.VisualHit.GetType() == typeof(ModelVisual3D)
于 2010-09-22T20:52:28.663 に答える