我想做的是知道用户是否点击了我的操纵杆的红色按钮。(为此,我绘制了真实的操纵杆图形以保持我们的绘图私密)
这个操纵杆是 XAML 3D。
红色按钮是一个 GeometryModel3D 对象,其 x:Name 为“Geo_Btn_CSS_TAKE”。当我点击操纵杆时,我可以做一个 HitTest,他给了我所有的 GeometryModel3D 对象,但我无法访问 x:Name,所以我不知道女巫是好人...
这就是我进行 HitTest 的方式:
private void OnTouchMouseDown(EventArgs e)
{
Viewport3D viewport3D = WtoHitTest((Grid)Parent, e) as Viewport3D; // My own HitTest works well, I get my viewport3D
Point mouseposition = WtoHelper.GetPositionFromEvent(e, viewport3D); // Get the point if it's a mouse event or touch event
Point3D testpoint3D = new Point3D(mouseposition.X, mouseposition.Y, 0);
Vector3D testdirection = new Vector3D(mouseposition.X, mouseposition.Y, 10);
PointHitTestParameters pointparams = new PointHitTestParameters(mouseposition);
RayHitTestParameters rayparams = new RayHitTestParameters(testpoint3D, testdirection);
VisualTreeHelper.HitTest(viewport3D, null, HTResult, pointparams);
}
public HitTestResultBehavior HTResult(System.Windows.Media.HitTestResult rawresult)
{
RayHitTestResult rayResult = rawresult as RayHitTestResult;
if (rayResult != null)
{
RayMeshGeometry3DHitTestResult rayMeshResult = rayResult as RayMeshGeometry3DHitTestResult;
if (rayMeshResult != null)
{
GeometryModel3D hitgeo = rayMeshResult.ModelHit as GeometryModel3D;
**// HERE I NEED TO KNOW WHAT IS MY GEOMETRYMODEL3D'S X:NAME**
// ANY IDEA???
}
}
return HitTestResultBehavior.Continue;
}
我还知道什么:
- 我的 3D 对象没有可以绑定的位置 (x,y)
- 我无法在 Viewport3D 中插入非 3D 元素
- 我无法访问 3D 对象的 x:Name
- 3D 对象与否 FrameworkElement 或 Visual。他们是 Media3D
我这样做的方式,我只需要知道 x:name 即可完成我的实现......如果有人有提示或其他方式,请告诉我。
谢谢
编辑:这是我的 3D 对象的属性: