繁体   English   中英

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

[英]How to check if a UIElement is visible in Silverlight?

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

有UIElement.Visibility属性,但这是由编程人员设置的,以指示该元素应该隐藏或可见。

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

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

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

有任何想法吗?

谢谢

你可以做一些代码来测试VisiblityHitTestVisible元素的属性。

编辑:

尝试执行此处提到的Silverlight - Determine if a UIElement is visible on screen

有一种方法可以检查“渲染可见性”(尽管它无法检查重叠的元素):

元素确实具有Unloaded事件。 每当对VisualTree进行更改导致该Element成为当前未渲染的VisualTree分支的一部分时,都会引发此事件。 但幸运的是,您不必侦听这些事件,因为只有加载的元素在VisualTree中确实具有后代或父级。 借助漂亮的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;

    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM