私がやりたいことは、ユーザーがジョイスティックの赤いボタンをクリックしたかどうかを知ることです。(目的のために、私は実際のジョイスティックのグラフィックを描画して、描画をプライベートに保ちます)
このジョイスティックは 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 オブジェクトのプロパティです: