Интерфейс ленты Office основан исключительно на обратных вызовах. Таким образом, вы не можете «извлечь элементы управления» из ленты и установить свойства для них. Вы реализуете изменения состояния, вызывая обратный вызов - в этом случае, вероятно, ваш обратный вызов getEnabled
.
Чтобы инициировать аннулирование ленты и повторную оценку ваших обратных вызовов, вы вызываете Invalidate на интерфейсе ленты, который вы получаете при загрузке ленты.
Некоторый код C #, который реализует это, может выглядеть так:
public class MyRibbon: ExcelRibbon
{
private static IRibbonUI _ribbonUi;
// This ribbon xml can be returned in code, or places in the .dna file
public override string GetCustomUI(string uiName)
{
return
@"
<customUI onLoad='Ribbon_Load'
xmlns='http://schemas.microsoft.com/office/2006/01/customui'>
<ribbon>
<tabs>
<tab idMso='TabAddIns'>
<group id='group1' label='Group1'>
<button id='button1' getEnabled='btn_GetEnabled' getLabel='btn_GetLabel' />
</group>
</tab>
</tabs>
</ribbon>
</customUI>
";
}
public void Ribbon_Load(IRibbonUI sender)
{
_ribbonUi = sender;
}
public bool btn_GetEnabled(IRibbonControl control)
{
return true;
}
public bool btn_GetLabel(IRibbonControl control)
{
return "My Button";
}
public static void Refresh()
{
if (_ribbonUi != null) { _ribbonUi.Invalidate(); }
}
}