2016-09-27 18 views
1

アプリケーションがクエリを実行し、実行中にメインアプリケーションを無効にしてプログレスバー画面を表示します。 2つの画面を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ウィンドウを表示する前に一度だけこれを実行する必要が

ql.Owner = mainWindow; 

。 そして、qlについてStateChangedで何もする必要はありません。

+1

これは私が探していたものです、歓声! –

関連する問題