【问题标题】:How to add a group to multiple built-in Ribbon tabs (vsto)?如何将组添加到多个内置功能区选项卡 (vsto)?
【发布时间】:2012-09-16 20:15:59
【问题描述】:

这是 VS2010 + Office 2010 插件。我想要的只是将一个按钮(或按钮组)添加到多个内置选项卡。例如,我的按钮应该在 New Mail Message RibbonNew Appointment Ribbon 中都可用。我曾尝试添加一个新选项卡(在可视化设计器中),但这似乎不起作用。按钮组出现在“新邮件消息”选项卡上,但不在“约会”选项卡上。顺便说一句,我正在使用以下 ID:TabNewMailMessageTabAppointment

【问题讨论】:

    标签: c# outlook vsto ribbon outlook-addin


    【解决方案1】:

    对于其他人来说,我能够在约会和新邮件消息选项卡上看到我的组的唯一方法是为每个内置选项卡添加一个功能区,然后复制/粘贴所有UI 和代码从一个功能区到另一个功能区。确保为每个内置选项卡选择正确的 RibbonType(功能区的属性)。

    【讨论】:

      【解决方案2】:

      指定的答案现已过时!

      1. 在 OfficeRibbon 对象上,根据需要为尽可能多的情况(例如 Microsoft.Outlook.Explorer 和 Microsoft.Outlook.Mail.Read)设置 RibbonType。
      2. 添加第一个 Tab 并设置 ControlId.OfficeId(例如 TabMail)
      3. 添加另一个 Tab 并设置 ControlId.OfficeId(例如 TabReadMessage)
      4. 在每个 Tab 中添加一个 Group 和一个 Button,并将 Button.Click 事件设置为指向相同的 OnClick 方法

      【讨论】:

        【解决方案3】:

        与上面的答案类似,但不使用 XML,您可以让组在两个不同的位置添加第二个选项卡。

        在功能区设计器中,将第二个选项卡添加到功能区并将 ControlID 更改为您希望查看组的第二个位置。然后右键单击原始选项卡中的组,然后单击复制。单击返回到新选项卡并将组粘贴到那里。它将复制组中已有的任何内容。但是,您必须重新添加事件。但对我来说,我只是重新使用了已经创建的事件并且它工作得很好。干杯。

        【讨论】:

          【解决方案4】:

          我没有 Outlook,但我在 Word/Excel/PPT 中使用了以下内容,所以我希望它也可以在 Outlook 中使用(未经测试!)。

          尝试添加功能区 (XML) 项,然后添加两个选项卡,其中包含一个看起来相同并调用相同代码但具有不同 ID 的按钮。

          XML:

          <tab idMso="TabNewMailMessage">
              <group id="MyGroup1" label="My Group1">
                  <button id="myButton1" label="Button 1" size="large"  onAction="ButtonOnAction" />
              </group>
          </tab>
          <tab idMso="TabAppointment">
              <group id="MyGroup2" label="My Group2">
                  <button id="myButton2" label="Button 2" size="large"  onAction="ButtonOnAction" />
              </group>
          </tab>
          

          C#:

              public void ButtonOnAction(IRibbonControl control)
              {
                  switch (control.Id)
                  {
                      case "myButton1":
                      case "myButton2":
                          // do something
                          Console.Out.WriteLine("Button ID: {0}", control.Id);
                          break;
                  }
              }
          

          【讨论】:

          • 感谢 Olle。我也希望这能奏效,但不幸的是它没有。我的想法是,可能是因为 Mail Compose 和 Appointment 是两个不同的 Inspector,因此需要在 Ribbon 的 RibbonType 属性中进行选择。我什至尝试在那里选择多种色带类型,但这也不起作用。它对我有用的唯一方法是添加一个新的功能区。请参阅下面的答案。
          • 好的,很高兴您找到并发布了答案!
          • 用户@magicnumber 通过将ButtonOnAction 设置为public 得到了工作的答案 - 感谢更新!
          猜你喜欢
          • 2018-08-29
          • 1970-01-01
          • 1970-01-01
          • 2019-04-13
          • 1970-01-01
          • 1970-01-01
          • 2020-08-15
          • 2021-03-01
          • 2010-10-06
          相关资源
          最近更新 更多