VSTO Outlook 切换状态

VSTO Outlook Toggle state

我正在为新邮件开发 VSTO Outlook 插件。用户可以在想要保存邮件时切换图像。

当前,当单击图像时,我将全局布尔值设置为 true。

private bool _state;
private void toggleBtn_Click(object sender, RibbonControlEventArgs e)
{
  if (_state) {
    _state = false;
  } else {
    _state = true;
  }
}

直到用户在发送第一封邮件之前打开另一封新邮件 window 之前,一切正常。

如何仅存储每个新邮件的状态 window?

非常感谢。

解决方案

有两种方法可以解决这个问题。

一:用户属性 https://www.add-in-express.com/creating-addins-blog/2013/01/30/preserve-outlook-ribbon-controls-state/

上的优秀博客

二:使用wrapper将状态存储在类 阅读更多关于 https://msdn.microsoft.com/en-us/library/office/ff973716(v=office.14).aspx

不确定是否可以获取到当前正在编辑的邮件的EntryId,如果可以,可以尝试将所有状态缓存到字典中,如下所示

private Dictionary<string, bool> _states = new Dictionary<string, bool>();
private void toggleBtn_Click(object sender, RibbonControlEventArgs e)
{  
  MailItem ml;
  // get current MailItem
  // something like: MailItem ml = popupWindow.GetMail

  // default false
  if (!(_states.Keys.Contains(ml.EntryId))){
      _states[ml.EntryId] = false;
  }

  // toggle the state
  _states[ml.EntryId] = !_states[ml.EntryId];

}

但是,您可能希望处理弹出窗口 window 关闭事件,以便在用户关闭弹出窗口(例如,发送电子邮件)时从字典中删除条目

解决方案

有两种方法可以解决这个问题。

一:用户属性 https://www.add-in-express.com/creating-addins-blog/2013/01/30/preserve-outlook-ribbon-controls-state/

上的优秀博客

二:使用包装器将状态存储在类中阅读更多https://msdn.microsoft.com/en-us/library/office/ff973716(v=office.14).aspx