2016-09-27 151 views
1

我的應用程序運行查詢,並在他們運行時,我禁用主應用程序,並顯示進度條屏幕。我希望這兩個屏幕表現爲一個單一的實體。我的意思是,如果用戶在執行查詢期間最小化主應用程序,那麼進度屏幕也會最小化。如果他們最大化或使主應用程序備份,進度屏幕也會恢復(並在前面)。如何讓子窗口最小化和最大化與主窗口

我試圖通過使用_StateChanged事件並操縱裏面的進度屏幕,但它不工作。 WriteLines按照他們應該的方式觸發,但進度屏幕沒有變化(即,當我最大化主應用程序時,進度屏幕沒有得到最大化)。

private void mainWindow_StateChanged(object sender, EventArgs e) 
    { 
     Console.WriteLine("State Changed"); 

     // if the progress screen is not null 
     if (ql != null) 
     { 
      // if main application has been minimized 
      if (this.WindowState == WindowState.Minimized) 
      { 
       Console.WriteLine("State Changed to Minimized"); 
       ql.WindowState = WindowState.Minimized; // minimize progress screen 
      } 
      // if main application has been set to normal 
      if (this.WindowState == WindowState.Normal) 
      { 
       Console.WriteLine("State Changed to Normal"); 
       ql.WindowState = WindowState.Normal; // set progress screen state to normal 
       ql.Focus(); // bring progress screen to focus 
      } 

      // if main application has been maximized 
      if (this.WindowState == WindowState.Maximized) 
      { 
       Console.WriteLine("State Changed to Maximized"); 
       ql.WindowState = WindowState.Maximized; // set progress screen state to maximized 
       ql.Focus(); // bring progress screen to focus 
      } 
     } 
    } 

我很好奇,如果有在,我應該充分利用,而不是試圖用代碼來實現這一點的.xaml性能。如果沒有,我的代碼丟失了什麼?

+0

由於父窗口和子窗口都是視圖,因此綁定到數據模型並不合適,因此您可以嘗試直接綁定到窗口狀態屬性,請參閱https://msdn.microsoft.com/en-us/library /system.windows.window.windowstate(v=vs.110).aspx但是這在 – MikeT

回答

1

如果QL是一個窗口,然後你可以將它的主人像這樣的主窗口:

ql.Owner = mainWindow; 

你需要顯示QL窗口前,要做到這一點只有一次。 你不需要在StateChanged中做任何關於ql的事情。

+1

後面的代碼中並不適用這正是我所尋找的,歡呼聲! –