如何检查UIElement在Silverlight中是否可见

本文关键字:Silverlight 是否 UIElement 何检查 检查 | 更新日期: 2023-09-27 18:26:04

如何检查任何给定的UIElement当前是否在UI上可见?

存在UIElement.Visibility属性,但这是由程序设置的,用于指示元素应隐藏或可见。

我已经检查了元素是否在VisualTree中。

如果顶部有另一个元素与之重叠,那么所有这些都无济于事

WPF有一个属性UIElement.IsVisible,它似乎可以完成这项工作,但Silverlight中缺少它。

有什么想法吗?

感谢

如何检查UIElement在Silverlight中是否可见

您可以执行一些代码来测试元素的VisiblityHitTestVisible属性。

编辑:

试着做一些这里提到的事情,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;
    }
}