我正在编写WPF应用程序并希望它作为隐藏窗口启动。我在调用Visibility
之前创建了Window对象并将其Visibility.Hidden
属性设置为Application.Run()
。然后,我有Window.Loaded
的事件处理程序,它还将可见性设置为Visibility.Hidden
。在调用Application.Run()
和回调到OnWindowLoaded()
之间,窗口的黑色轮廓在屏幕上闪烁然后消失。这就像窗口管理器正在为窗口或其他东西创建一个投影,然后立即隐藏它。
通过仪器运行我的项目后,我终于发现Window.Show()
以某种方式被调用。所以,我查看了http://www.dotnetframework.org/Search.aspx的源代码:
Application.Run()
最终会调用名为Application.RunInternal()
的私有方法。RunInternal()
检查传递给Run()
方法的Window对象的可见性。Visibility
媒体资源不是Visibility.Visible
,则会调用Window.Show()
。然后我查看了System.Windows.Window的源代码:
Window.Show()
将Visibility
属性(窗口)设置为Visibility.Visible
。基于此,我没有看到如何强制窗口保持隐藏状态。通过尝试在启动时使窗口不可见,我正在使Application对象调用Window.Show()
;我不明白为什么Application对象甚至关心窗口的可见性。这是令人沮丧的经历...: - (
我已经看到其他答案说不要打电话给Application.Run()
而是设置你自己的事件调度员,但这似乎有点过分了。我只是希望主窗口保持隐藏状态,因为没有“闪烁”出现在应用程序启动时,并且当我准备好它时窗口变得可见(这在我的应用程序逻辑中稍后发生)。
有人可以提出建议吗?
答案 0 :(得分:2)
对此答案的评论最终使我找到了解决此问题的方法。我需要一次在多个屏幕上显示多个窗口,并且通过最小化窗口,它可以提供所需的性能。谢谢。
答案 1 :(得分:0)
您是否删除了StartupUri
中的App.xaml
条目?如果这样做,App
类不会为您实例化窗口并显示它。您可以通过覆盖App.OnStartup
方法自行完成此操作。
基本上,我在这个OnStartup
方法中构建了一个composition root,并在流程结束时创建了一个窗口:
protected override void OnStartup(StartupEventArgs e)
{
base.OnStartup(e);
// Do your custom initialization code here
MainWindow = new MainWindow();
MainWindow.Show();
}
如果你真的想省略整个应用程序构建过程(我不建议,因为你没有像应用程序资源的回退那样的功能),你可以创建一个{{1}你自己使用这段代码:
Dispatcher