未填充WPF JumpList图标

agxfikkp  于 2022-11-18  发布在  其他
关注(0)|答案(1)|浏览(126)

我已经在WPF应用程序中设置了一个JumpList。
除了图标未显示外,JumpList功能完全正常,这是我在任务栏中看到的内容:

下面是创建JumpTask所需的代码:

using System.Windows.Shell;

public JumpTask BuildJumpTask
{
    get
    {
        return new JumpTask
        {
            Arguments = Argument,
            ApplicationPath = Assembly.GetEntryAssembly()?.Location,
            Description = GenerateDescription(),
            IconResourcePath = GetIconPath(),
            Title = Name
        };
    }
}

Private string GetIconPath()
{
    return Type switch
    {
        JumpListItemType.About => Path.GetFullPath(@"Assets\Icons\JumpList\About.png"),
        JumpListItemType.Help => Path.GetFullPath(@"Assets\Icons\JumpList\Help.png"),
        JumpListItemType.Quit => Path.GetFullPath(@"Assets\Icons\JumpList\Quit.png"),
        JumpListItemType.Settings => Path.GetFullPath(@"Assets\Icons\JumpList\Settings.png"),
        JumpListItemType.Sign_Out => Path.GetFullPath(@"Assets\Icons\JumpList\Sign_Out.png"),
            _ => null!
    };
}

所有.png文件都将输出到预期的目录,
我正在为这些文件使用以下属性:

**建置动作:**内嵌资源 (我也尝试过内容)
**复制到输出目录:**如果较新则复制

jk9hmnmh

jk9hmnmh1#

JumpTask.IconResourcePath的文档声明(强调为mine):
https://learn.microsoft.com/en-us/dotnet/api/system.windows.shell.jumptask.iconresourcepath
包含图标的资源的路径。默认值为null
[...]与JumpTask一起使用的图标必须作为本机资源可用。
因此,您不能为JumpList图标指定PNG文件的路径-这是有意义的,因为Win32图标支持多种大小(例如高DPI、大图标等)而不是单个图像-您不能对PNG文件执行此操作。

  • 幸运的是 * 您不需要启动VisualC++来构建包含少量图标的.dll文件:此QA包含有关如何将多个.ico文件添加为本机ICON/ICONDIRECTORY资源的说明:Adding multiple Icons (Win32-Resource) to .NET-Application-请注意,C#编译器的-win32icon选项只允许您指定一个图标(作为.exe文件的 * 应用程序图标 *),这使得它无法用于此目的。

别忘了确保包含16 x16、24 x24和32 x32的合适图标插图,以确保跳转列表项目在非96 dpi显示器上看起来可接受。
另请注意,Win32 * 原生资源 * 是与.NET .resources/.resx完全不同的概念,也与WPF/XAML <ResourceDictionary>对象分开。

相关问题