Visio Title Block对象形状颜色修改失败问题咨询
Visio修改「Title Block small」形状填充色失效解决方案
- 先解除主题颜色锁定:Visio内置的「Title Block small」默认绑定文档主题,直接修改填充单元格会被主题设置覆盖,需要先对父形状和所有子形状关闭主题颜色锁定,对应属性为
LockThemeColors = 0。 - 替换填充单元格索引:你当前修改的
visFillBkgnd是填充背景色,仅在填充图案为非实心时生效,常规实心填充的生效单元格为visFillForegnd,直接替换代码中的该参数即可。 - 适配嵌套组合形状:如果该标题块为多层嵌套的组合形状,仅遍历第一层子形状会漏改内部实际带填充的可见形状,建议用递归逻辑遍历所有层级的子形状。
修改后的参考代码如下:
// 先关闭父形状的主题颜色锁定 TitleShape.LockThemeColors = 0; // 递归设置所有层级形状的填充色 void SetAllSubShapeFill(Shape rootShape, int red, int green, int blue) { // 仅处理二维可填充形状 if (rootShape.OneD == 0) { rootShape.get_CellsSRC( (short)VisSectionIndices.visSectionObject, (short)VisRowIndices.visRowFill, (short)VisCellIndices.visFillForegnd ).FormulaForceU = $"RGB({red},{green},{blue})"; } // 遍历所有子形状递归处理 foreach (Shape subShape in rootShape.Shapes) { SetAllSubShapeFill(subShape, red, green, blue); } } // 调用设置为白色 SetAllSubShapeFill(TitleShape, 255, 255, 255);
如果以上操作仍未生效,可以手动在Visio界面修改一次目标形状的填充色,随后打开「开发工具→显示形状表」,查看Fill区域内哪个单元格的值发生了变更,对应替换代码中的单元格索引即可,部分特殊自定义形状会用自定义行的单元格控制填充样式,不使用默认的填充行参数。
内容的提问来源于stack exchange,提问作者Dan Wulff
相关产品推荐
相关产品推荐

