如何检查UI上当前是否显示任何给定的UIElement?
有UIElement.Visibility属性,但这是由progammer设置的,表示该元素应该隐藏或可见。
我已经检查过元素是否在VisualTree中。
如果顶部有另一个与其重叠的元素,则所有这些都无济于事。
WPF有一个属性UIElement.IsVisible似乎可以完成这项工作,但Silverlight中缺少这个属性。
有什么想法吗?
由于
答案 0 :(得分:0)
您可以执行一些代码来测试元素的Visiblity
和HitTestVisible
属性。
修改强>
尝试做这里提到的事情,
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;
}
}