我移植一個Silverlight 4應用程序WinRT的,我是用看起來像這樣(和Silverlight 4中工作得很好)以下的碰撞檢測代碼:碰撞檢測中的WinRT /地鐵
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;
}
然而,在我的Metro應用程序中,它根本沒有正確檢測到衝突。我認爲這可能與使用錯誤的rootVisual有關。制定出了rootVisual舊的代碼是這樣的:
private void FindRootVisual()
{
this.rootVisual = this.canvas;
while (this.rootVisual.Parent != null)
{
this.rootVisual = (FrameworkElement)this.rootVisual.Parent;
}
}
但在WinRT中,this.canvas具有null父。我已經嘗試將rootVisual直接設置到我的應用程序的MainPage對象中,並將其設置爲Canvas所在的網格,但它無濟於事。
這種技術是否仍然適用於WinRT/Metro,如果是這樣,我需要使用什麼rootVisual?如果不是的話,WinRT中碰撞檢測的更好方法是什麼?
在第二部分中最明顯的問題是: Silverlight是如何工作的? – Dani
不知道,但它確實工作:) –