【问题标题】:How to make window appear on top of all other windows?如何使窗口出现在所有其他窗口的顶部?
【发布时间】:2013-11-11 12:56:10
【问题描述】:

我正在构建一个小型应用程序,它对另一个软件的程序文件执行更新,然后启动该软件。启动应用程序后,会在第二个 GUI 线程中显示启动窗口,而在主线程上构建并显示第二个应用程序的主窗口:

var shell = (Shell) Shell;
Application.Current.MainWindow = shell;
shell.Show();

显示第二个应用程序的外壳后,关闭第一个窗口。一切正常,除了第二个窗口的外壳 弹出* 其他窗口。即:我从资源管理器启动启动器应用程序,启动器窗口显示在资源管理器窗口的顶部。启动器窗口关闭,主应用程序窗口出现在资源管理器窗口下:

我试过了:

var shell = (Shell) Shell;
Application.Current.MainWindow = shell;
shell.Topmost = true;
shell.Show();
shell.InjectInitialViews();

这解决了这个问题,但是即使我在任务栏中单击另一个应用程序,我也无法在外壳上方显示其他窗口。

var shell = (Shell) Shell;
Application.Current.MainWindow = shell;
shell.Topmost = true;
shell.Show();
shell.InjectInitialViews();
shell.Topmost = false;

什么都不做...实现此目的的正确方法是什么?

【问题讨论】:

    标签: c# wpf xaml


    【解决方案1】:

    在您的第二个示例中没有任何意义,因为 UI 没有在程序执行期间更新,因此您对 shell.Topmost = true; 的调用将被忽略。实现您想要的更好的方法可能是处理 Window.Deactivated 和可能的 Window.Activated 事件:

    private void SecondWindow_Deactivated(object sender, EventArgs e)
    {
        MainWindow window = (MainWindow)sender;
        window.TopMost = true;
    }
    

    【讨论】:

    • 您好 SHeridan,感谢您的回答。 shell.Activate() 就是缺少的所有东西,因此您与事件非常接近。我不知道 Activate() 方法,虽然它真的很简单。谢谢!
    【解决方案2】:

    如果我没记错的话,我通过执行以下操作在带有外部启动器的 WPF 智能客户端中解决了这个问题:

    1. 启动主应用程序后,启动器通过 P/Invoke 调用AllowSetForegroundWindow 以允许主应用程序设置前台窗口(如果启动器处于活动状态,则允许这样做)。

    2. 主应用程序通过 P/Invoke 调用 SetForegroundWindow 将前景窗口设置为其主 shell 窗口。

    ...或类似的东西。可能是启动器在等待应用程序的主窗口激活后调用了SetForegroundWindow。这是很久以前的事了,我再也无法访问源代码了。

    【讨论】:

    • 谢谢 Mike,在我的情况下实际上更容易,因为我可以在创建它的线程中激活窗口,所以不需要在这里跨线程。您的回答帮助我找到了答案,谢谢。
    【解决方案3】:

    感谢 Mike 和 Sheridan 的回答,我发现解决方案是简单地激活创建它的线程中的窗口。所以

    var shell = (Shell) Shell;
    Application.Current.MainWindow = shell;
    shell.Topmost = true;
    shell.Show();
    shell.InjectInitialViews();
    shell.Activate();
    

    成功了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-01-11
      • 2010-12-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-06
      相关资源
      最近更新 更多