VSTO开发中如何在CustomTaskPanes中添加image.ico图标?
VSTO自定义任务窗格添加image.ico图标的实现方法
VSTO原生的CustomTaskPane对象本身没有直接暴露Icon属性,无法像普通WinForms窗体那样直接赋值图标,需要根据你要显示图标的实际场景对应配置:
第一步:先把image.ico加入项目资源
- 右键你的VSTO项目 → 【添加】→【现有项】,选中本地的
image.ico文件添加到项目中 - 选中刚添加的ico文件,在右侧属性面板将生成操作设置为
嵌入的资源,复制到输出目录设置为“如果较新则复制” - 更推荐的资源管理方式:右键项目 → 【属性】→ 切换到【资源】页,顶部下拉选择“图标”分类,点击【添加资源】→【添加现有文件】选中
image.ico,后续可以直接通过Properties.Resources.image调用图标,无需手动解析资源流
场景1:给控制任务窗格显隐的功能区按钮设置图标(最常用需求)
绝大多数场景下你要加的图标,是放在功能区用来切换任务窗格显示/隐藏的按钮上,且Office会自动关联这个图标到任务窗格侧边停靠时的标签上,无需额外配置:
- 如果你用的是功能区可视化设计器:直接选中用来控制任务窗格的
ToggleButton,在属性面板找到Image属性,导入项目里的image.ico或者直接选择已添加的项目资源即可 - 如果你用XML方式自定义功能区:在按钮的回调方法中返回图标资源,示例代码如下:
// 功能区按钮的GetImage回调方法 private void OnTaskPaneToggleGetImage(Office.IRibbonControl control, ref object image) { image = Properties.Resources.image; }
对应的XML配置里给按钮加getImage="OnTaskPaneToggleGetImage"属性即可。
场景2:在任务窗格自身的标题栏区域显示图标
原生CustomTaskPane的默认标题栏由Office宿主(Excel/Outlook等)渲染,无法直接修改内容,需要先隐藏默认标题栏,自行在用户控件内实现标题栏:
- 修改原有初始化代码,把任务窗格的默认标题设为空字符串:
private void ThisAddIn_Startup(object sender, System.EventArgs e) { myUserControl1 = new UserControl1(); // 原有标题参数设为空,隐藏Office默认渲染的标题栏 myCustomTaskPane = this.CustomTaskPanes.Add(myUserControl1, ""); myCustomTaskPane.Visible = true; } - 打开
UserControl1的设计器,在控件顶部拖入一个Panel作为自定义标题栏,往Panel内添加:- 一个
PictureBox控件,将其Image属性设置为项目资源中的image.ico,调整为合适大小 - 一个
Label控件,文本设置为你原来的“AmpliFund Addon”即可
- 一个
内容的提问来源于stack exchange,提问作者v_dg
相关产品推荐
相关产品推荐

