我有一个用 XML 而非设计器制作的 VSTO 插件功能区。它上面有一个按钮,我只想在用户处于插件控制的范围内时启用它。
我的回调设置在加载功能区时可以正常工作。
Ribbon1.cs
代码
public bool refreshButtonState;
public void Ribbon_Load(Office.IRibbonUI ribbonUI)
{
this.ribbon = ribbonUI;
refreshButtonState = false;
ribbon.InvalidateControl("btnRefreshQuery");
}
public bool refreshEnabled(Office.IRibbonControl control)
{
return refreshButtonState;
}
我捕获了一个工作表更改事件来监视用户在下面的范围。
ThisAddIn.cs
代码
void ThisWorkbook_SheetChange(object ws, Excel.Range rng)
{
//Disable Button state here.
if (rng.ListObject != null)
{
if (rng.ListObject.Name.StartsWith(LO_PREFIX))
{
//Enable Button state here.
}
}
}
我不能只是从Globals.Ribbon.Ribbon1
我所做的研究中多次建议的那样拿起丝带。使用 XML 设计器不会授予此功能。
将我的工作表监听功能移到功能区似乎需要做很多工作,对我来说,它们属于插件而不是功能区,因为它们为插件提供了其他功能。我可能遗漏了一些明显的东西,但是存在的文档几乎不存在。除了提问者或回答者没有得到的一堆论坛问题。
TLDR:从不属于功能区类的代码更改属性并使 RibbonX 控件无效。