在启动时完全隐藏WPF窗口?

40

我希望在启动时完全隐藏我的窗口。没有窗口,任务栏中也没有条目。用户看不到应用程序已经启动。

我该如何实现这个功能?

谢谢!


1
他以后能打开窗户吗? - Daniel Hilgarth
1
出于兴趣,这实际上解决了什么问题?您可能需要考虑使用操作系统互斥锁来防止应用程序的多个实例启动。如果没有任何东西打开,用户可能会认为他们误点击了... - LukeN
2
@LukeN:一个有效的用例是将GUI应用程序用作命令行程序(在这种情况下,您希望它在后台执行命令而不弹出,然后退出)。有时制作两个版本的应用程序以获得很少使用的命令行支持是不可行的。 - Cameron
@LukeN 实现静默打印将是另一个使用案例。 - Eternal21
5个回答

50

与H.B.的方法相比,另一种方法是将 Visibility 设置为 hidden 并将 ShowInTaskbar 设置为 false。这仍然创建了窗口并允许其正常工作。

<Window x:Class="WpfApplication2.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="350" Width="525" ShowInTaskbar="False" Visibility="Hidden">
    <Grid>

    </Grid>
</Window>

4
你确定你的说法吗?我目前正在尝试使用你的技巧,但是如果控件的可见性为“隐藏”,则似乎 MainWindowLoad 事件不会被触发。 - Emrys Myrooin
4
当窗口第一次显示时,将会触发 "Load" 事件。由于它从未被看到过,因此也不会触发该事件。如果需要在窗口构建后执行某些操作,请尝试使用 "initialized" 事件代替。请注意,不要改变原来的意思。 - Wobbles
这对我没用。使用@H.B.的答案更容易。即使我不想要窗口,也不要创建和显示一个窗口。 - Chuck Savage
3
在我的情况下,我无法将可见性从“隐藏”切换为“可见”,因此我使用了“ShowInTaskbar =“ False”+“WindowState =“ Minimized””。然后我可以轻松地在代码中更改它们。 - Muhammad Sulaiman

45

不要显示窗口。默认情况下在 App.xaml 中定义了一个 StartupUri,请将其删除并在代码后台重写 OnStartup 方法以创建一个窗口,然后根据需要 ShowHide 窗口。


21

只需不创建窗口,仅从App.xaml中删除StartupUri即可。

将应用程序设置为ShutDownMode="OnExplicitShutdown"可能有助于防止在关闭最后一个窗口时关闭您的应用程序。


3
我认为你实际上不需要将ShutDownMode设置为OnExplicitShutdown。我认为只有在他不想在最终显示窗口并关闭它时关闭应用程序时才需要这样做。 - LukeN
3
根据他想要创建的应用程序,这可能是有用的,否则应用程序将在最后一个窗口关闭时立即关闭,就像你所说的那样。这将使他对应用程序生命周期有明确的控制。但我会稍微修改我的答案以反映出这不是绝对必要的。 - Leonard Brünings

0
我的需求: 启动一个进程来显示一个窗口,并将其嵌入到WPF控件中。该窗口必须正常加载,触发初始化/加载事件,然后作为子窗口在控件中运行。
我的解决方案: 将窗口的宽度和高度设置为1,在加载后将其调整为正常大小。窗口将在短时间内显示,几乎为1秒钟。用户不会注意到它。

0
如果需要创建一个窗口但不显示它,只需不显示它即可。设置“-s”命令行参数以静默模式运行。
    protected override void OnStartup(StartupEventArgs e)
    {
        // Get the command line arguments
        string[] args = Environment.GetCommandLineArgs();
        var silentMode = args.Count() > 1 && args[1].ToLower().Equals("-s");

        // If silent mode is enabled, the window is not displayed
        var mainWindow = new MainWindow();
        if (!silentMode) mainWindow.Show();
    }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接