C# VSTO 合并文档级功能区和应用程序级功能区

C# VSTO Merge Doc Level Ribbon and App Level Ribbon

我在 Excel 中创建了一个包含功能区的文档级自定义,我想为 Excel 创建一个应用程序级自定义,其中包含同名的功能区。我的问题是如何让两条丝带结合起来?目前,它们具有相同的自定义 ControlId。

控件的 idQ 属性 允许多个加载项共享容器,例如自定义选项卡和组。

在下面的 VBA 示例中,两个 Excel 加载项在加载项选项卡上共享同一个 "Contoso" 组;每个添加一个按钮。关键是在标记中指定相同的唯一命名空间。然后,控件可以使用 idQ 引用此命名空间。

CustomUI for add-in 1

<customUI xmlns="http://schemas.microsoft.com/office/2006/01/customui" 
xmlns:x="myNameSpace" >
  <ribbon>
    <tabs>
      <tab idMso="TabAddIns">
        <group idQ="x:Contoso" label="Contoso">
          <button id="C1" label="Contoso Button 1" size="large" 
            imageMso="FileSave" onAction="c_action1" />
        </group>
     </tab>
   </tabs>
 </ribbon>
</customUI>

CustomUI for add-in 2

<customUI xmlns="http://schemas.microsoft.com/office/2006/01/customui" 
 xmlns:x="myNameSpace" >
   <ribbon>
     <tabs>
       <tab idMso="TabAddIns">
          <group idQ="x:Contoso" label="Contoso">
             <button id="C2" label="Contoso Button 2" size="large" 
               imageMso="FileSave" onAction="c_action2" />
          </group>
       </tab>
     </tabs>
   </ribbon>
 </customUI>

如果您使用 COM 加载项自定义 Fluent UI,命名空间名称必须是 COM 加载项的 ProgID,但行为是相同的。使用共享加载项时,ProgID 为 AddInName.Connect。当您使用 Microsoft Visual Studio 2005 Tools for the 2007 Microsoft Office System (Visual Studio 2005 Tools for Office Second Edition) 创建加载项时,ProgID 是加载项的名称。

您可以在 MSDN 中的以下系列文章中阅读有关 Fluent UI(又名功能区 UI)的更多信息:

  1. Customizing the 2007 Office Fluent Ribbon for Developers (Part 1 of 3)
  2. Customizing the 2007 Office Fluent Ribbon for Developers (Part 2 of 3)
  3. Customizing the 2007 Office Fluent Ribbon for Developers (Part 3 of 3)