3

我将一些 3D 模型显示为 Model3DGroups。它们被捕获 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

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

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

hitResult.VisualHit.GetType() == typeof(ModelVisual3D)
于 2010-09-22T20:52:28.663 回答
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");
            }

    }
于 2010-09-26T09:46:08.030 回答