如何修改导航选项中解决方案根文件夹的图标
修改Outlook解决方案文件夹图标的方法
嘿,我来帮你搞定这个问题!你提到的那个作为Add-in的根文件夹(就是你说的第三个项),还有它上面的三个子文件夹,要修改它们的图标,得借助Outlook对象模型里的PropertyAccessor来设置对应的MAPI属性,具体操作和代码调整如下:
核心思路
Outlook里的文件夹图标是由MAPI属性PR_ICON_INDEX(属性标签:http://schemas.microsoft.com/mapi/proptag/0x10160003)控制的。你可以给这个属性设置Outlook内置的图标索引,简单直接;如果想用自己的自定义图标,就得处理字节流来设置另一个属性PR_ICON,这个步骤稍复杂,先给你讲最常用的内置图标方法。
调整后的代码示例
我们可以在创建或者获取文件夹之后,加上设置图标的逻辑,直接套用到你现有的代码里就行:
// 先定义要用到的MAPI属性标签 const string PR_ICON_INDEX = "http://schemas.microsoft.com/mapi/proptag/0x10160003"; if (firstRun == true) { solutionRoot = rootStoreFolder.Folders.Add("Solution Demo", Outlook.OlDefaultFolders.olFolderInbox) as Outlook.Folder; solutionCalendar = solutionRoot.Folders.Add("Solution Calendar", Outlook.OlDefaultFolders.olFolderCalendar) as Outlook.Folder; solutionContacts = solutionRoot.Folders.Add("Solution Contacts", Outlook.OlDefaultFolders.olFolderContacts) as Outlook.Folder; solutionTasks = solutionRoot.Folders.Add("Solution Tasks", Outlook.OlDefaultFolders.olFolderTasks) as Outlook.Folder; // 给根解决方案文件夹设置图标(这里用索引39,你可以换成自己想要的数值) solutionRoot.PropertyAccessor.SetProperty(PR_ICON_INDEX, 39); solutionRoot.Save(); // 给三个子文件夹分别设置不同的图标 solutionCalendar.PropertyAccessor.SetProperty(PR_ICON_INDEX, 40); solutionCalendar.Save(); solutionContacts.PropertyAccessor.SetProperty(PR_ICON_INDEX, 41); solutionContacts.Save(); solutionTasks.PropertyAccessor.SetProperty(PR_ICON_INDEX, 42); solutionTasks.Save(); } else { solutionRoot = rootStoreFolder.Folders["Solution Demo"] as Outlook.Folder; solutionCalendar = solutionRoot.Folders["Solution Calendar"] as Outlook.Folder; solutionContacts = solutionRoot.Folders["Solution Contacts"] as Outlook.Folder; solutionTasks = solutionRoot.Folders["Solution Tasks"] as Outlook.Folder; // 如果需要修改已存在的文件夹图标,把下面的注释去掉就行 // solutionRoot.PropertyAccessor.SetProperty(PR_ICON_INDEX, 39); // solutionRoot.Save(); }
一些重要提示
- 内置图标索引可以通过测试不同数值来找到合适的,不同版本的Outlook可能有细微差异,你多试几个就能找到心仪的图标。
- 每次设置完属性后,一定要调用
Save()方法,不然图标不会生效哦。 - 如果想用自己的自定义.ico图标,得先把图标作为资源嵌入到你的Add-in项目里,然后把图标转换成字节数组,再设置
PR_ICON属性(标签:http://schemas.microsoft.com/mapi/proptag/0x10150102),这个过程需要处理字节流,相对麻烦一些。
补充一下:你说的“下方第三个项是作为Add-in的解决方案,其上方的三个项是它的子项”,对应的就是代码里的
solutionRoot(根文件夹)和solutionCalendar、solutionContacts、solutionTasks这三个子文件夹,上面的代码可以分别给它们设置不同的图标~
内容的提问来源于stack exchange,提问作者EJ Camp
相关产品推荐
相关产品推荐

