我有一个在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表达式,但没有成功。
答案 0 :(得分:1)
VisualTreeHelper.FindElementsInHostCoordinates
会返回一个UIElements(IEnumerable<UIElement>
)和documentation,
对于大多数操作,您通常只对集合中的第一个UIElement感兴趣,这是视觉上最直接渲染元素的元素...
您可以获取第一个元素并将其传递给Remove
方法而不进行强制转换(as
)。
if (controls.Count() > 0)
{
canvasArea.Children.Remove(controls.First());
}