【问题标题】:SIlverlight: Can't find Image on CanvasSIlverlight:在画布上找不到图像
【发布时间】:2011-03-08 07:47:11
【问题描述】:

在我的画布中,我有一个图像对象。我没有在其中设置源,但它有坐标和大小。标签是:

问题是:当我将鼠标移到它上面时,我想找到它。使用此代码:

VisualTreeHelper.FindElementsInHostCoordinates(point, Application.Current.RootVisual)

除非设置了来源,否则它不会找到图像。如果未设置源,则不返回图像。有谁知道为什么?这给我带来了问题。我有一些拖放代码,我希望在该 Image 控件上放置一些东西,但我需要知道鼠标何时悬停在它上面。

我知道还有其他方法可以做到这一点(例如在该位置放置其他东西,例如网格或其他东西并检测它),但这不起作用。我可以想到几种可行的方法,但它们远没有那么优雅。

如果我能用上面的方法返回我的图像,那绝对是理想的。

【问题讨论】:

    标签: silverlight image canvas visualtreehelper


    【解决方案1】:

    在您的代码中,您有 Point point = e.GetPosition(_canvas); 这将获取相对于画布的 MousePosition 坐标,但您的第二行 VisualHelper.FindElementsInHostCoordinates(point,Application.Current.RootVisual) 是相对于整个页面进行搜索。您需要更改其中一个或另一个,以便它们与同一控件相关。我会改成VisualHelper.FindElementsInHostCoordinates(point,_canvas)

    【讨论】:

    • 我很兴奋,因为这似乎是一个显而易见的解决方案。但很可惜,事实并非如此。将其设置为 true 无效。进一步检查显示它默认设置为 true。不过,谢谢。
    • 你从哪里得到point?这是来自图像本身的 MouseEvent 吗?要检查的另一件事是确保点的坐标与Application.RootVisual 相关,因为那是您的参考对象。
    • 这是拖放代码。有问题的代码是: Point point = e.GetPosition(_canvas); foreach(VisualTreeHelper.FindElementsInHostCoordinates(point, Application.Current.RootVisual) 中的 UIElement 元素) 那时的所有内容(包括我用来提供背景的网格)都会显示出来。我看到了我正在拖动的图像、网格、画布和用户控件。我尝试删除网格,因为它可能导致该位置的图像不显示,但是随着网格不再出现在元素列表中,所有这些都发生了变化。
    • 其实还不是这样。画布是 100% 的用户控件 (rootvisual)。在我的 Xaml 中,我有: 注意网格具有与关联图像完全相同的坐标。网格由 FindElementsInHostCoordinates 返回,但 Image 不是。
    • 我将 FindElementsInHostCoordinates 更改为使用 _canvas,但它仍然无法正常工作。
    【解决方案2】:

    您可以在 Image 对象周围添加<Border> 对象。

    或者您可以为 mouseenter 和 mouse leave 添加事件处理程序并更改光标。

    【讨论】:

      猜你喜欢
      • 2013-11-18
      • 2013-12-11
      • 2014-06-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-10-08
      • 1970-01-01
      相关资源
      最近更新 更多