如何检查UIElement在Silverlight中是否可见
本文关键字:Silverlight 是否 UIElement 何检查 检查 | 更新日期: 2023-09-27 18:26:04
如何检查任何给定的UIElement当前是否在UI上可见?
存在UIElement.Visibility属性,但这是由程序设置的,用于指示元素应隐藏或可见。
我已经检查了元素是否在VisualTree中。
如果顶部有另一个元素与之重叠,那么所有这些都无济于事
WPF有一个属性UIElement.IsVisible,它似乎可以完成这项工作,但Silverlight中缺少它。
有什么想法吗?
感谢
您可以执行一些代码来测试元素的Visiblity
和HitTestVisible
属性。
编辑:
试着做一些这里提到的事情,Silverlight - Determine if a UIElement is visible on screen
有一种方法可以检查"渲染可见性"(尽管它不能检查重叠元素):
元素确实具有Unloaded
事件。只要VisualTree发生更改,导致Element成为当前未渲染的VisualTree分支的一部分,就会引发它。但幸运的是,您不必监听这些事件,因为只有加载的元素在VisualTree中才有decedent或父元素。在一个漂亮的小ExtensionMethod
的帮助下,您可以检查元素是否在任何给定的时间点加载:
public static class FrameworkElementExtensions
{
public static bool IsLoaded(this FrameworkElement element)
{
return element.GetVisualChildren().Any();
//I'm not sure if this alternative is better:
//return System.Windows.Media.VisualTreeHelper.GetParent(element)!= null;
//or
//return element.GetVisualParent() != null;
}
}