为 MS Store 打包的 Winforms 应用程序在任务栏上显示不正确的图标

如何解决为 MS Store 打包的 Winforms 应用程序在任务栏上显示不正确的图标

我使用“Windows 应用程序打包项目”(WAPP ---以前称为“桌面桥”)在 Visual Studio 中打包了我的 Winforms 应用程序。当我测试由 WAPP(.appxbundle 文件)创建的应用商店安装时,应用程序安装并正确启动,但 Windows 任务栏中显示的应用程序图标不正确(它显示我的应用程序图标的一个非常小的版本,带有 ?blue-square?背景)。

我用于我的应用的图标文件提供以下图像尺寸(具有透明背景):16x16、24x24、32x32、48x48 和 256x256。

应用程序的主窗体(启动时显示的唯一窗体)具有在窗体设计器中设置的以下属性

ShowInTaskbar=True
ShowIcon=True
Icon=*my icon file*

我的应用程序的属性页面将“应用程序>图标”设置为与上述相同的图标文件

此外,在解决此问题时,我尝试将图标文件添加到我的应用程序的“资源>图标”,并将以下代码添加到主窗体的 Form_Load 事件中,以便在运行时重新应用该文件

Me.Icon = My.Resources.MyIcon7

使用此运行时代码,Store 应用程序继续在任务栏中显示带有蓝色背景的小/不正确图标图像。

Windows 开始菜单显示的图标是具有正确透明背景的正确(较大)图标。

此外,如果我使用 .exe(在 Visual Studio 中构建应用程序时在此处创建“bin\Release\myapp.exe”)启动我的应用程序的“非商店”版本,任务栏中会显示正确的图标。

非常感谢!

解决方法

好的,我想通了!这是解决方案... MS Store 安装版应用所使用的图标必须在“Windows 应用程序打包项目”(原“桌面桥”)中提供。

访问和/或提供这些图标:

  1. 在 Visual Studio 中,转到解决方案资源管理器并展开您添加到解决方案中的“Windows 应用程序打包项目”节点。
  2. 在展开的节点中找到并双击 Package.appxmanifest。这将打开清单 GUI
  3. 单击清单 GUI 中的 Visual Assets 选项卡
  4. 循环浏览左侧的图片类别,确保您对所有图片都满意。注意:任务栏的图像位于应用程序图标类别下

此外,任务栏中我的图标上出现的蓝色背景显然是 Windows 主题的默认行为。 Windows 会检查您为应用程序提供的图标,并确定该图标是否与当前主题的任务栏颜色形成鲜明对比。如果 Windows 认为您的图标不适合当前主题,它会创建并显示您的图标的“镀层”版本,而不是常规的“未镀层”版本。当一个图标被镀上时,图标会稍微缩小并放置在一个方形的蓝色背景上(在我看来,它看起来很丑而且不合适)。要覆盖此默认行为并为浅色 Windows 主题提供您自己的主题特定图标,请将新图标文件添加到 Assets 文件夹(在解决方案资源管理器中),文件名中包含文本“lightunplate”。例如,我的 Assets 文件夹包含以下图标文件:Square44x44Logo.targetsize-24_altform-unplate.png 当 Theme 设置为 Dark 时,它被用作任务栏图标。我创建了一个名为:Square44x44Logo.targetsize-24_altform-lightunplate.png 的新图标文件,并通过右键单击该文件夹并选择 Add>Existing Item 将其添加到 Assets 文件夹中。添加后,新图标在主题设置为浅色时被窗口使用,而不是被窗口“镀”。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?