WPF:如何走向Visual Tree以找到一个单击的3D模型的Model3DGroup?

时间:2010-09-22 18:27:55

标签: c# .net wpf visual-tree

我正在将一些3D模型显示为Model3DGroups。 它们被Viewport3D包围,可以捕获MouseDown事件。

我想确定点击了哪个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属于哪个?

以下是树的屏幕截图: alt text

2 个答案:

答案 0 :(得分:1)

您可以使用Linq to Visual Tree,因为您要查找的命名元素是否为Model3DGroup无关紧要。它只是另一个依赖对象(如果我理解你的问题)。

检查结果的类型然后LinqToVT上升,检索它的XAML前身:

hitResult.VisualHit.GetType() == typeof(ModelVisual3D)

答案 1 :(得分:1)

我是通过使用ModelUIElement3D包围Model3DGroup来实现的。

<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");
            }

    }