如何检查Silverlight中是否显示UIElement?

时间:2014-10-08 13:05:01

标签: c# wpf silverlight

如何检查UI上当前是否显示任何给定的UIElement?

有UIElement.Visibility属性,但这是由progammer设置的,表示该元素应该隐藏或可见。

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

如果顶部有另一个与其重叠的元素,则所有这些都无济于事。

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

有什么想法吗?

由于

2 个答案:

答案 0 :(得分:0)

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

修改

尝试做这里提到的事情,  Silverlight - Determine if a UIElement is visible on screen

答案 1 :(得分:0)

有一种方法可以检查"渲染能见度" (虽然它无法检查重叠元素):

元素确实有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;

    }
}