Windows 7、.NET 4.0 では、次のコードを Visual Studio によって生成された空白の WPF アプリケーションにコピーすることで再現できる問題があります。
public MainWindow()
{
InitializeComponent();
Loaded += new RoutedEventHandler(MainWindow_Loaded);
}
void MainWindow_Loaded(object sender, RoutedEventArgs e)
{
new Window() { Title = "Test", ShowInTaskbar = false, Owner = this }.Show();
}
- アプリを実行
- セカンダリ ウィンドウをアクティブにする
- 他の実行中のアプリケーションへの Alt-Tab
- マウスを使用して、タスク バーで WPF アプリをアクティブにします
これで、WPF アプリが再びアクティブになり、セカンダリ ウィンドウがアクティブになり、メイン ウィンドウが非アクティブになります。これは、予期された (そして望ましい) 動作です。
代わりにこれを実行します (手順 4 のみが異なります)。
- アプリを実行
- セカンダリ ウィンドウをアクティブにする
- 他の実行中のアプリケーションへの Alt-Tab
- Alt-Tab で WPF アプリに戻ります
WPF アプリが再びアクティブになりますが、メイン ウィンドウがアクティブになります。このコードを追加する
private void Application_Activated(object sender, EventArgs e)
{
Windows[1].Activate();
}
App.xaml.cs に追加しても問題は解決しません。これは、2 番目のケースでは両方のウィンドウがアクティブになっているためです。また、セカンダリ ウィンドウをクリックしても、メイン ウィンドウは非アクティブになりません。これを実現するには、(すでにアクティブ化されている)メイン ウィンドウとセカンダリ ウィンドウをもう一度クリックする必要があります。
これを回避するにはどうすればよいですか (どちらの場合もセカンダリ ウィンドウのみをアクティブにする必要があります)。