【问题标题】:WPF-Window Topmost for own application only?WPF-Window Topmost 仅适用于自己的应用程序?
【发布时间】:2011-01-28 14:54:28
【问题描述】:

我的 WPF 应用程序中的 Splashscreen/Loading-Window 设置为 Topmost="True"。现在,即使您切换到另一个应用程序,这个窗口也位于所有其他窗口的顶部(因为加载需要一些时间)。我不想要这种行为。

如果我设置 Topmost="False" 窗口根本不在最上面。但是,如果您在使用另一个应用程序后切换回我的应用程序,我的客户有时不会意识到 Loading-Windows 仍在工作。应用程序似乎没有响应,因为后台的 Loading-Window 仍然是活动窗口并且是模态的。

我希望加载窗口位于最顶层,但前提是我的应用程序位于前台。如果您切换到另一个程序,该窗口应该会消失并在您切换回来时重新出现在最顶部。

【问题讨论】:

  • 只是出于好奇,为什么在显示初始屏幕时要同时加载其他窗口?通常,当应用程序使用启动画面时,那是该应用程序当时唯一可见的窗口......
  • 因为加载需要很长时间,我的老板希望一些数据已经在主窗口中可见。您无法与数据进行交互,但至少您可以查看它。

标签: c# wpf window topmost


【解决方案1】:

您可以尝试使用窗口的“所有者”属性,这样启动画面将始终与其他窗口重叠。

【讨论】:

  • 在我的应用程序中,MainWindow 需要时间来创建,因此在显示初始屏幕时它尚未创建。所以我还不能将启动画面窗口的所有者设置为主窗口。
【解决方案2】:

我认为更改 MainWindow 的加载模式可能会有所帮助。如果您可以在后台线程上花费时间加载窗口,那么您可以采用以下路径:

  1. 显示 MainWindow 空白或裸骨(空白字段/网格等)
  2. 启动异步加载方法以获取数据并填充主窗口
  3. 创建启动画面,将所有者设置为自己并显示
  4. 确保加载完成后关闭启动画面。

在处理负载时应该保持飞溅在顶部。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-08-18
    • 1970-01-01
    • 2011-10-27
    • 2013-07-17
    • 2017-08-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多