silverlight - 确定对象是否可见和可点击

标签 silverlight windows-phone-7

我正在寻找有效确定控件是否实际可见和可点击的方法。我的意思是超越检查对象的可见性属性。

我可以检查 RenderSize 并且如果任何父元素折叠,那将是 [0,0]。所以这也很简单。我还可以遍历可视化树,查看所有元素的 Opacity 是否设置为 1。

我不知道如何很好地检查这些情况:

  • 该对象被其他某个对象挡住了 .显然,可以使用 FindElementsInHostCoordinates() 并进行计算以找出这些对象的阻碍程度,但这可能是一种矫枉过正。我还可以制作相关对象的“屏幕截图”和整个页面的“屏幕截图”,并检查我的对象所在的像素是否与实际对象像素匹配。这听起来也有点矫枉过正。
  • 对象被透明对象挡住,该对象仍然“吞下”点击(点击) .在这种情况下,第一个问题的解决方法仍然可能失败。

  • 更新 (又一个场景)
  • 对象超出父对象/屏幕的边界 .除了大量计算之外,还有其他方法可以找到这一点吗?

  • 有什么更好的想法吗?我错过了什么吗?

    谢谢!

    最佳答案

    您可以以编程方式测试 Visiblity 和 HitTestVisible元素的属性,但超出此范围 您实际上无法测试 如果单击事件将被转发到元素或被其上的元素吞噬 - 因为阻止或转发点击可能发生在事件处理程序方法中,而您根本无法以通用方式确定。

    以下面的例子为例:

  • 您想测试是否 ParentElement面板是可点击的,带有 ChildElement关于它
  • ChildElement附加了一个处理点击事件的事件处理程序,它是可见的,它的 HitTestVisible属性设置为true。
  • 基于此,您还不能决定是否将事件转发到 ParentElement : 在 ChildElement 的点击事件处理程序中它可以设置事件的Handled属性为 true 将停止 ParentPanel 接收事件,或者它可以将其保留为 false,使 ParentPanel 接收事件。

  • 因此,如果涉及自定义 EventHandler,您将无法确定某个元素是否可点击。您最多可以查看 VisiblityIsHitTestVisible子元素和父元素的属性,并使用 TransformToVisual 检查子元素/父元素相对于彼此的呈现位置方法。

    关于silverlight - 确定对象是否可见和可点击,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5288109/

    相关文章:

    silverlight - 在哪里可以找到我正在浏览的 silverlight 应用程序的 xap 文件?

    wpf - 是 x :Array supported on Windows Phone 7

    windows - 使用 CSS3、HTML5 和 Javascript 重新创建 WP7 Metro UI 的外观

    xaml - 在文本 block 中裁剪的长文本

    visual-studio-2010 - Visual Studio 2010 Express。写入输出窗口

    silverlight - 单元测试 silverlight 这住在哪里?

    silverlight - 如何将 esri map 保存为图像文件

    silverlight - wcf ria 服务 - poco 与父子关系

    silverlight - "CreateRiaClientFilesTask"任务意外失败

    sql - 将sqlite数据库转换为sdf文件