![](/img/trans.png)
[英]Minimize Child Window in WPF When Owner Window Of Child's Owner Window Minimizes
[英]When is a WPF window usable as an Owner?
我們有一個間歇性問題,其中在對話框窗口的ShowDialog
方法中引發了InvalidOperationException
。 可疑的原因是因為對話框將其Owner
設置為尚未顯示的窗口。 該結論基於以下內容:
Owner
)在其Loaded
處理程序期間實例化並在對話框上調用ShowDialog
。 Owner
設置為應用程序窗口 Window.Owner
的文檔說,如果將其設置為尚未顯示的窗口,它將拋出InvalidOperationException
。 Loaded
事件可能在顯示窗口之前觸發。 ShowDialog
時會顯示主應用程序窗口。 當主機系統承受壓力時,應用程序窗口“ Show”可能會延遲,因此調用ShowDialog
時,尚不能用作Owner
。 問題是:這是真的嗎? 那么,是什么窗口事件或覆蓋,可以用它顯示后可靠地觸發,從而使窗口然后可以可靠地用作對話框的Owner
,無論系統的條件?
<Window x:Class="MyApplication.MyMainWindow"
... etc...
Loaded="OnLoaded">
... etc...
</Window>
class MyMainWindow : Window
{
private void OnLoaded(object sender, RoutedEventArgs e)
{
var dialog = new MyDialog(Application.Current.MainWindow);
dialog.ShowWindow();
}
}
class MyDialog: Window
{
public MyDialog(Window window)
{
Owner = window;
}
}
問題是:這是真的嗎?
從檢查代碼來看就是這樣。 Chris Sells和Ian Griffiths 編寫的WPF編程還指出,恰好在顯示窗口之前引發了Loaded
事件。
可以在窗口顯示后使用什么窗口事件或替代來可靠地觸發它,以便無論系統狀況如何,都可以將該窗口可靠地用作對話框的所有者?
顯示窗口后,將觸發一次ContentRendered
事件。 我認為這將是適合您情況的最佳選擇。
您也可以隨時強制創建Window的hWnd,盡管我不確定這樣做是否足以避免發生異常,因為創建的窗口不一定“顯示”。 盡管如此,知道是否最終調用與窗口管理相關的Win32方法仍然是一件有用的事情:
new WindowInteropHelper(window).EnsureHandle()
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.