2014-02-09 89 views
3

我的應用程序中有一個窗體,其中包含兩個選項卡的選項卡控件。在其中一個標籤中,我有一個UIElement。當鼠標懸停在它上面時,啓動一個計時器,並在一秒鐘後執行一些功能。Silverlight - 確定UIElement是否在屏幕上可見

問題是當鼠標懸停並立即切換選項卡,比我需要停止計時器。在選項卡控件事件中做它是不可能的(選項卡控件不能識別定時器)。我希望能夠知道這個UIElement何時在屏幕上不可見(當切換選項卡時,Visibility屬性仍然可見)。

這是怎麼看:

private void element_MouseEnter(object sender, MouseEventArgs e) 
    {    
     timer.Start() 
    } 

private void dt_Tick(object sender, EventArgs e) 
    {  
     //Some functionality 
    } 

回答

3

據我所知,有以測試元素是否可見沒有可靠的方法。

在Silverlight中,隱藏元素的方法有很多(在屏幕之外,ScrollViewer遮擋,被另一個元素重疊,完全透明,被着色器效果扭曲等),以及未隱藏(指定Z順序,指定自定義呈現逆效應等)

這裏有兩種解決方法,可能會或可能不適合你的要求變換,重疊:

  1. 如果你試圖做同樣的事情到工具提示,爲您的UIElement添加處理程序到MouseLeave事件。在這種情況下,如果定時器處於活動狀態,請停止它。

  2. 或者,在dt_Tick處理程序中,您可以通過檢查TabControl.SelectedIndex屬性來檢查顯示哪個選項卡,如果選擇了錯誤的屬性,則忽略此事件。

更新:這裏爲#2一些示例代碼(未經測試):

public static IEnumerable<FrameworkElement> visualParents(this FrameworkElement e) 
{ 
    DependencyObject obj = e; 
    while(true) 
    { 
     obj = VisualTreeHelper.GetParent(obj); 
     if(null == obj) yield break; 
     FrameworkElement fwe = obj as FrameworkElement; 
     if(null != fwe) yield return fwe; 
    } 
} 

public static bool isOnVisibleTab(FrameworkElement elt) 
{ 
    TabItem item = elt.visualParents().OfType<TabItem>().FirstOrDefault(); 
    if(null == item) 
     return true;   // Did not find the tab, return true 
    return item.IsSelected; // Found the tab, return true if the tab is selected 
} 
+0

感謝您的回答。我真的想做一些工具提示,但是在鼠標離開時停止定時器並不能解決問題(不會觸發鼠標離開)。裏面dt_tick我無法檢查活動標籤',因爲它是我的應用程序中的所有UIElements的通用類 – user2717436

+0

您可以檢查任何你想要的:查看更新。 – Soonts

0

您可以用Unloaded事件解決這個問題。只要VisualTree發生變化而導致元素成爲當前未呈現的VisualTree分支的一部分,就會引發它。

private void element_MouseEnter(object sender, MouseEventArgs e) 
{    
    timer.Start(); 
    element.Unloaded += OnElementUnloaded; 
} 

private void OnElementUnloaded(object sender, EventArgs e) 
{ 
    element.Unloaded -= OnElementUnloaded; 
    timer.Stop(); 
} 

private void dt_Tick(object sender, EventArgs e) 
{ 
    element.Unloaded -= OnElementUnloaded; 
    //Some functionality 
} 
相關問題