2014-10-08 33 views
0

如何檢查是否有任何給定的UIElement目前在UI上可見?如何檢查UIElement是否在Silverlight中可見?

有UIElement.Visibility屬性,但是這是由程序員設置的,以指示元素應該隱藏或可見。

我已經檢查過該元素是否在VisualTree中。

所有這一切都沒有幫助,如果上面有另一個元素重疊它。

WPF有一個屬性UIElement.IsVisible似乎做了這項工作,但這在Silverlight中是缺少的。

任何想法?

感謝

回答

0

你可以做一些代碼來測試Visiblity和元素的HitTestVisible財產。

編輯:

嘗試做一些喜歡這裏提到的, Silverlight - Determine if a UIElement is visible on screen

+0

我已經嘗試過,但它並沒有解決問題。如果您有一個與網格重疊的TextBlock(以便用戶看不到TextBlock),則可見性可見並且HitTestVisible爲true。 – cpa9000 2014-10-08 13:14:11

+0

是的,它是可見的,是不是你想實現? – Sajeetharan 2014-10-08 13:15:50

+0

是的。但在這種情況下,TextBlock在用戶界面上不可見,因爲其上有其他控件。 – cpa9000 2014-10-08 13:19:35

0

有一種方法來檢查「渲染知名度」(雖然不能檢查重疊元素):

元素確實有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; 

    } 
}