【发布时间】:2011-07-18 16:19:57
【问题描述】:
我正在使用 WPF JumpTask 对象,并且我希望我的 Windows 7 跳转列表图标是我自己的应用程序中的图标 - 但不是默认图标。一个不同的。
那么我该怎么做呢?我想我指定了一个不同的图标资源索引。
但是我什至如何将我的图标存储为资源,以及我如何知道哪个图标是哪个索引?
【问题讨论】:
我正在使用 WPF JumpTask 对象,并且我希望我的 Windows 7 跳转列表图标是我自己的应用程序中的图标 - 但不是默认图标。一个不同的。
那么我该怎么做呢?我想我指定了一个不同的图标资源索引。
但是我什至如何将我的图标存储为资源,以及我如何知道哪个图标是哪个索引?
【问题讨论】:
根据MSDN
与 JumpTask 一起使用的图标必须是 可作为原生资源使用。
您只能从单独的资源文件加载图标。因此,您需要使用您的图标将IconResourcePath 属性设置为DLL。如果您的图标很少,请使用IconResourceIndex 属性指定需要的图标。
例如下一个代码
<Application x:Class="YourApp.App"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
StartupUri="MainWindow.xaml">
<JumpList.JumpList>
<JumpList>
<JumpTask Title="TargetApp"
Description="JumpTask to start TargetApp"
ApplicationPath="TargetApp.exe"
IconResourcePath="LibWithIcons.dll"
IconResourceIndex="2" />
</JumpList>
</JumpList.JumpList>
</Application>
将从 LibWithIcons.dll 中创建 JumpList 并设置为 JumpTask 项 TargetApp 第三个 图标(基于 null 的编号)。顺便说一句,如果 JumpTask 启动另一个应用程序,通常IconResourcePath 会设置为该应用程序的可执行文件,因此会显示它的图标:
<JumpTask Title="TargetApp"
Description="JumpTask to start TargetApp"
ApplicationPath="TargetApp.exe"
IconResourcePath="TargetApp.exe"
IconResourceIndex="0" />
MSDN forums 中描述的如何创建图标 DLL。
【讨论】:
它在 Win32 资源中寻找您的图标,这与托管资源完全不同。看看这篇优秀的文章来理解这些 - 可以创建它们并指定图标顺序。
Embed Icons into WPF Application as Resource
我最终使用了由 Einar Eigilson 创建的 great tool,它允许您将图标作为资源添加到构建后事件中。
还值得注意的是,无论我做什么,在调试模式下运行时都无法显示图标。即使嵌入静态 win32 资源也没有显示主图标之外的任何图标。在像我一样拔头发之前尝试在 Release 中进行测试。
【讨论】:
Icon = Imaging.CreateBitmapSourceFromHIcon(KillXDes.Properties.Resources.KillProcIcon.Handle, Int32Rect.Empty, BitmapSizeOptions.FromEmptyOptions()); 不是一个重要的问题,但他们把它搞砸了。