我正在将一些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属于哪个?
以下是树的屏幕截图:
答案 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");
}
}