LoginSignup
2
1

More than 5 years have passed since last update.

WPFで親ウインドウが無いウインドウを作った際に前面に出す

Posted at

背面で作られたりして悲しいのです

ちょいと覚え書き。
WPFでウインドウをつくった際に、 NotifyIcon からポップアップメニュー出してウインドウつくったりすると、親無しのウインドウを作ることになりますよね。
で、そうして作ったウインドウはなんだか悲しく背面に出て来たりします。
それを前面に出した状態で作ってしまおうと言う事。

Topmostを使う

結局どうやるかというと、以下のコード。

public static Window MakeKeyAndOrderFront(this Window wnd)
{
    if (!wnd.IsVisible)
    {
        wnd.Show();
    }
    if (wnd.WindowState == WindowState.Minimized)
    {
        wnd.WindowState = WindowState.Normal;
    }

    wnd.Active();
    wnd.Topmost = true;
    wnd.Topmost = false;
    wnd.Focus();
}

重要なのは最後の3行。

  1. Topmostを使って最前面にする
  2. 最前面を取り下げる
  3. フォーカスを取得

最前面を取り下げて(2.)も元に戻る訳ではなく、最前面に居座ったままです。
その状態でフォーカスを当ててやると希望の状態に。

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1