我编写了一个具有自定义(非标准)图标的 WPF 应用程序。Splashscreen 也实现了。
如果我启动应用程序并等待它加载,图标会正确显示。
但是,如果我在显示我的启动屏幕之前启动我的应用程序并切换到另一个应用程序(例如 Outlook),则该图标不会显示在 Windows 任务栏中。
如果我通过 alt+tab 切换到我的应用程序,该图标会直接出现。
有任何想法吗?
我编写了一个具有自定义(非标准)图标的 WPF 应用程序。Splashscreen 也实现了。
如果我启动应用程序并等待它加载,图标会正确显示。
但是,如果我在显示我的启动屏幕之前启动我的应用程序并切换到另一个应用程序(例如 Outlook),则该图标不会显示在 Windows 任务栏中。
如果我通过 alt+tab 切换到我的应用程序,该图标会直接出现。
有任何想法吗?
我用另一种语言(PowerBuilder,而不是.Net bases)编写的程序遇到了同样的问题,它的行为完全相同。如果它影响的不仅仅是 WPF,则一定是 Windows 问题。所以必须有办法解决这个问题。
如果“我的”任务栏项未处于活动状态,框架可能会以错误的方式要求它。
将焦点设置回应用程序时,任务栏图标会重新出现。
一个粗略的解决方案是这样做(伪代码):
application.Hide();
application.Show()
另一种解决方案(伪代码):
application.SetRedraw(False);
application.Show();
application.SetRedraw(True);
但这会产生令人讨厌的闪烁。仅“重新激活”或“重绘”工具栏的解决方案会更好!
问题的原因(在我的非 WPF 情况下)是程序在主窗口的构造函数完成之前显示 UI。即在所有初始化代码完成之前强制重绘/显示窗口。这可能会导致 Windows 认为窗口不是应用程序,而是启动屏幕的“对话框”,而不是分配任务栏项目。当我设法删除过早显示主 GUI 的代码时,问题就消失了。
我在 Winforms 应用程序中遇到了完全相同的问题。我找到的解决方案也可能对您的 WPF 应用程序有所帮助。
只需确保窗口的标题没有更改,直到最后一刻。在 Winforms 中,我将Text = "blahblah"
行移出 Form_load 事件,并移入 Form1_Shown 事件,现在隐藏的任务栏图标问题已经消失。
我在某些操作系统上看到了类似的问题,但不是全部。当我切换程序时,我在任务栏中的图标更改为默认应用程序 onw(“空窗口”)。这似乎是 WPF 本身的问题,而不是你的程序的任何问题。