如何檢查是否有任何給定的UIElement目前在UI上可見?如何檢查UIElement是否在Silverlight中可見?
有UIElement.Visibility屬性,但是這是由程序員設置的,以指示元素應該隱藏或可見。
我已經檢查過該元素是否在VisualTree中。
所有這一切都沒有幫助,如果上面有另一個元素重疊它。
WPF有一個屬性UIElement.IsVisible似乎做了這項工作,但這在Silverlight中是缺少的。
任何想法?
感謝
如何檢查是否有任何給定的UIElement目前在UI上可見?如何檢查UIElement是否在Silverlight中可見?
有UIElement.Visibility屬性,但是這是由程序員設置的,以指示元素應該隱藏或可見。
我已經檢查過該元素是否在VisualTree中。
所有這一切都沒有幫助,如果上面有另一個元素重疊它。
WPF有一個屬性UIElement.IsVisible似乎做了這項工作,但這在Silverlight中是缺少的。
任何想法?
感謝
你可以做一些代碼來測試Visiblity
和元素的HitTestVisible
財產。
編輯:
嘗試做一些喜歡這裏提到的, Silverlight - Determine if a UIElement is visible on screen
有一種方法來檢查「渲染知名度」(雖然不能檢查重疊元素):
元素確實有Unloaded
事件。 只要VisualTree發生變化而導致元素成爲當前未呈現的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;
}
}
我已經嘗試過,但它並沒有解決問題。如果您有一個與網格重疊的TextBlock(以便用戶看不到TextBlock),則可見性可見並且HitTestVisible爲true。 – cpa9000 2014-10-08 13:14:11
是的,它是可見的,是不是你想實現? – Sajeetharan 2014-10-08 13:15:50
是的。但在這種情況下,TextBlock在用戶界面上不可見,因爲其上有其他控件。 – cpa9000 2014-10-08 13:19:35