确定对象是否可见且可单击

Ala*_*ich 6 silverlight windows-phone-7

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

我可以检查RenderSize,如果任何父元素被折叠,那将是[0,0].所以这也很简单.我还可以遍历可视化树,看看是否所有元素的不透明度都设置为1.

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

  1. 该物体受到其他物体的阻碍.显然,可以使用FindElementsInHostCoordinates()并进行计算以找出这些对象阻碍了多少,但这可能是一种矫枉过正.我还可以制作有问题的对象的"屏幕截图"和整个页面的"屏幕截图",并检查我的对象应该与实际对象像素匹配的像素.这听起来像个矫枉过正.
  2. 物体被仍然"吞下"咔嗒声(水龙头)的透明物体阻挡.在这种情况下,第一个问题的解决方法仍然可能失败.

更新(另一个场景)

  1. 该对象超出父对象/屏幕的范围.除了大量的计算之外,还有其他方法可以找到它吗?

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

谢谢!

Ger*_*osz 3

您可以以编程方式测试HitTestVisible元素的可见性和属性,但是除此之外,您实际上无法测试单击事件是否将转发到该元素或被其上方的元素吞没 - 因为在事件中可能会发生阻止或转发点击您根本无法以通用方式确定的处理程序方法。

举个例子:

  • 您想要测试面板是否可点击,上面ParentElementChildElement
  • ChildElement有一个附加的事件处理程序来处理单击事件,它是可见的并且其HitTestVisible属性设置为 true。
  • 基于此,您还无法决定是否将事件转发到ParentElement:在它的单击事件处理程序中,ChildElement可以将事件的Handled属性设置为 true,这将阻止 ParentPanel 接收事件,也可能将其保留为 false,从而使 ParentPanel接收事件。

因此,如果涉及自定义事件处理程序,您将无法确定某个元素是否可单击。您最多可以做的是检查子元素和父元素的VisiblityIsHitTestVisible属性,并使用该方法检查子元素/父元素相对于彼此呈现的位置TransformToVisual