预期时未调用功能区切换按钮getPressed()
本文关键字:按钮 getPressed 功能区 调用 | 更新日期: 2023-09-27 18:22:33
我在outlook2013中为新的电子邮件功能区添加了一个自定义切换按钮。当该按钮被打开时,它会向邮件消息添加一个用户属性。
public void OnLockButton(Office.IRibbonControl control, bool pressed)
{
Outlook.MailItem mi = Globals.ThisAddIn.Application.ActiveInspector().CurrentItem as Outlook.MailItem;
var userProp = mi.UserProperties.Add("MyIsLocked", Outlook.OlUserPropertyType.olYesNo, false);
userProp.Value = pressed;
// Make sure we update the ribbon
ribbon.Invalidate();
}
按钮的"toggle"状态正在使用getPressed()回调进行更新,该回调检查用户属性的状态:
public bool GetLockButtonPressed(Office.IRibbonControl control)
{
Outlook.MailItem mailItem = Globals.ThisAddIn.Application.ActiveInspector().CurrentItem as Outlook.MailItem;
var userProp = mailItem.UserProperties.Find("NMIsLocked");
bool isLocked = (userProp != null && userProp.Value);
return isLocked;
}
这一切都很好。
问题发生在以下情况:
- 打开新邮件
- 打开切换按钮
- 放弃邮件
- 打开新邮件
此时,切换按钮看起来像是在新邮件消息上打开的,即使该消息上没有设置用户属性。
在调试器中,我可以看到没有为新消息调用getPressed(),所以我认为功能区按钮的状态与上次绘制时相同。
我的一些想法包括在打开(或关闭邮件时)强制色带无效,或者我错过了其他方法吗?
我正在寻找与Outlook中的"高优先级"切换按钮类似的功能。
如本线程所示,当检查器被激活时,您需要一个回调来使功能区无效。无论何时创建新的检查器,都可以添加此事件处理程序。
public class MyRibbon: Office.IRibbonExtensibility
{
private Office.IRibbonUI ribbon;
public void Ribbon_Load(Office.IRibbonUI ribbonUI)
{
this.ribbon = ribbonUI;
// ensure that any new inspectors created have a callback to refresh the button state on ativation.
Globals.ThisAddIn.Application.Inspectors.NewInspector += Inspectors_NewInspector;
}
void Inspectors_NewInspector(Outlook.Inspector Inspector)
{
((Outlook.InspectorEvents_10_Event)Inspector).Activate += Inspector_Activate;
}
void Inspector_Activate()
{
ribbon.Invalidate();
}
}