Je suis le portage d'une application Silverlight 4 à WinRT, et le code de détection de collision suivant, j'utilisais se présente comme suit (et fonctionne très bien dans Silverlight 4):détection de collision dans WinRT/Metro
private bool IsCollision(Point p)
{
var hostPoint = this.canvas.TransformToVisual(this.rootVisual).TransformPoint(p);
return CheckCollisionPoint(hostPoint, this.canvas);
}
private bool CheckCollisionPoint(Point point, UIElement subTree)
{
var hits = VisualTreeHelper.FindElementsInHostCoordinates(point, subTree);
return hits.Count() > 0;
}
Cependant , dans mon application Metro, il ne détecte pas les collisions correctement. Je pense que cela pourrait être lié à l'utilisation du mauvais rootVisual. L'ancien code qui a fonctionné le RootVisual était comme ça:
private void FindRootVisual()
{
this.rootVisual = this.canvas;
while (this.rootVisual.Parent != null)
{
this.rootVisual = (FrameworkElement)this.rootVisual.Parent;
}
}
Mais dans WinRT, this.canvas a un parent de null. J'ai essayé de placer le rootVisual directement à l'objet MainPage de mon application, et à la grille que le canevas est dedans mais cela n'aide pas.
Cette technique devrait-elle fonctionner dans WinRT/Metro, et si oui, quel rootVisual dois-je utiliser? Sinon, quelle serait la meilleure façon de détecter les collisions dans WinRT?
La question évidente dans la deuxième partie est la suivante: Comment cela a-t-il fonctionné dans Silverlight? – Dani
ne sais pas, mais ça a marché :) –