2010-06-17 28 views
1

我的wpf應用程序出現問題,模式對話框出現在主應用程序後面,導致它掛起。WPF應用程序中的模態對話框焦點問題

這是非常不一致的,大多數情況下,彈出窗口正常工作,並顯示在前面,但偶爾會彈出後面,停止任何與它的交互。如果發生這種情況,我仍然可以使用任務欄關閉對話框。我注意到,它通常發生在許多其他應用程序打開並且任務欄已滿時。另外,我正在使用兩個屏幕,問題只出現在任務欄的屏幕上 - 非常奇怪!

對話框是一個窗口控件,它包含一個注入的usercontrol,因爲它是數據上下文。要設置窗口的所有者調用的ShowDialog(),在應用程序中的第一個活動窗口是用來代替Window.GetWindow(本)前:


private static Window GetOwner() 
{ 
    if (Application.Current != null) 
    { 
     var owner = Application.Current.Windows.Cast().FirstOrDefault(w => w.IsActive); 
     return owner ?? Application.Current.MainWindow; 
    } 
    return null; 
} 

什麼可能會導致此問題的任何想法?甚至如何嘗試跟蹤它,以便在發生時收集更多信息?

感謝, 多納爾

+0

轉讓後的「所有者」的價值是什麼?它是否一致? – Robaticus 2010-06-17 13:43:55

回答

0

我失焦問題,在Windows窗體應用程序,它有時翻譯成閃爍的效果。原因是其中一個人的代碼修改隱藏模式窗口,直到它顯示,以避免醜陋的黑暗補丁!由於他在最上面的模式窗口中調用了.Hide(),所以焦點轉移到另一個應用程序,當窗口完全加載時調用.Show()時,焦點會以焦點&或閃爍爲焦點。

我花了一段時間來指出這個問題,並改變了改變不透明度的邏輯。我把窗戶變成透明的,直到滿載。看看這是否以任何方式幫助你!

0

我剛剛和我的WPF應用程序發生了類似的情況,因爲模式打開窗口的Owner屬性沒有正確設置。在大多數情況下,它仍然有點不錯,但很多時候模式窗口會被卡住,就像你所描述的那樣,特別是在多個應用程序窗口之間切換時。

我說我自己的ShowDialog()方法,以模態窗口,它是這樣的:

public bool? ShowDialog(Window owner) 
    { 
     Owner = owner; 
     return ShowDialog(); 
    } 

我展示它時擁有窗口顯式傳遞。通過正確設置Owner屬性,我的問題得到解決。

也許你還沒有正確設置所有者屬性?