Windows Phone 8中的HitTestResult

时间:2014-12-20 07:56:31

标签: c# .net wpf windows-phone-8

我有一个在WPF中完全没问题的应用程序,但当我在我的Windows Phone 8应用程序中实现它时,我遇到的问题是我无法在WP8中使用相同的库。

在WPF中,我创建了一些随机形状,并在鼠标上单击这些形状,我删除了形状,单击鼠标的项目。

   Point pt = e.GetPosition((Canvas)sender);
   if (null == pt)
   {
       pt = array;
   }

   HitTestResult result = VisualTreeHelper.HitTest(canvasArea, pt);

   if (result != null)
   {
        canvasArea.Children.Remove(result.VisualHit as Shape);
   }

这完全正常。 但是在WP8中我不能使用相同的代码,因为WP8和WPF的.Net库是不同的。

然而,我设法来到一些谷歌获得捕获元素并得到SO的一些答案的帮助

var element = (UIElement)sender;
var controls = VisualTreeHelper.FindElementsInHostCoordinates ( e.GetPosition ( element ), element );

controls为我提供了捕获形状的值,但我不知道如何编写代码以从画布中删除这些项目。因为controls没有这样的东西。

canvasArea.Children.Remove(result.VisualHit as Shape);

任何人都可以帮我删除。我也试过lambda表达式,但没有成功。

1 个答案:

答案 0 :(得分:1)

VisualTreeHelper.FindElementsInHostCoordinates会返回一个UIElements(IEnumerable<UIElement>)和documentation

的集合
  

对于大多数操作,您通常只对集合中的第一个UIElement感兴趣,这是视觉上最直接渲染元素的元素...

您可以获取第一个元素并将其传递给Remove方法而不进行强制转换(as)。

if (controls.Count() > 0)
{
    canvasArea.Children.Remove(controls.First());
}