【发布时间】:2013-05-21 12:59:19
【问题描述】:
在 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 不能解决问题,因为现在在第二种情况下,两个窗口都被激活。此外,单击辅助窗口不会停用主窗口。我必须再次单击(已激活的)主窗口和辅助窗口才能实现此目的。
我怎样才能避免这种情况(在这两种情况下只有辅助窗口应该处于活动状态)?
【问题讨论】:
-
您是否需要激活主窗口(即使没有聚焦)?如果没有,那么
ShowDialog()而不是Show()应该适合你。 -
是的,主窗口必须是独立的。这只是说明问题的一个最小示例,它将是一个更大的应用程序。我想消除这只是奇怪的行为。想象一下像 Visual Studio 之类的东西 - 如果我将一个文档浮出主窗口,然后按两次 Alt-Tab,则只有浮动窗口仍然被激活,而不是主窗口。如果主窗口处于活动状态,即使不应该处于活动状态,我也会在正确处理输入时遇到问题。
标签: wpf focus multi-window