質問するログイン新規登録

回答編集履歴

1

ついき

2015/06/24 01:05

投稿

Tak1wa
Tak1wa

スコア4791

answer CHANGED
@@ -1,30 +1,43 @@
1
1
  WindowAとWindowBが同一アプリケーション内であると前提した場合で回答します。
2
2
  WindowのOwnerプロパティで親を指定させます。
3
3
 
4
- 今回の例であればTopMost=trueなWindowAをWindowBのOwnerに指定すれば、WindowBはモーダレスで起動してもWindowAの前面に出ます。
5
-
6
4
  親子関係の設定を行うことで、いくつか副作用も発生します。詳細はMSDNを参照してください。
7
5
  [Window.Owner プロパティ ](https://msdn.microsoft.com/ja-jp/library/system.windows.window.owner(v=vs.110).aspx)
8
6
 
7
+ AとBを呼び出す画面(仮にMainWindowとします。)があるのであれば、
8
+ AはTopMost=true、BはTopMost=falseでOwnerにCを設定すれば良いと思います。
9
+
9
10
  ```lang-C#
10
- public partial class WindowA : Window
11
+ public partial class MainWindow : Window
11
12
  {
12
- public WindowA()
13
+ public MainWindow()
13
14
  {
14
15
  InitializeComponent();
15
- this.Topmost = true;
16
16
  }
17
17
 
18
- private void Button_Click(object sender, RoutedEventArgs e)
18
+ private void btnA_Click(object sender, RoutedEventArgs e)
19
19
  {
20
- var hoge = new WindowB();
20
+ var A = new WindowA();
21
- hoge.Owner = this;
21
+ A.Topmost = true;
22
- hoge.Show();
22
+ A.Show();
23
23
  }
24
+
25
+ private void btnB_Click(object sender, RoutedEventArgs e)
26
+ {
27
+ var B = new WindowB();
28
+ B.Topmost = false;
29
+ B.Owner = this;
30
+ B.Show();
31
+ }
24
32
  }
25
33
  ```
26
34
 
27
35
  [Window.Topmost プロパティ](https://msdn.microsoft.com/ja-jp/library/system.windows.window.topmost(v=vs.110).aspx)
28
36
 
29
37
  WindowAとWindowBが別アプリケーションの場合は、やれるかわかりませんが
30
- 出来たとしても、もう少し低い層でフックする必要がありそうです。
38
+ 出来たとしても、もう少し低い層でフックする必要がありそうです。
39
+
40
+ ---
41
+ #追記
42
+ よく見たら、Aを常にあとから表示されるTopmostなBの前面に表示したいということなので、
43
+ ご質問の意図と異なる回答をしていましたのでソースと一部内容を修正しました。