[英]How to check if a UIElement is visible in Silverlight?
如何检查给定的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中确实具有后代或父级。 借助漂亮的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.