如何将按钮添加到功能区(C#)上预先存在的选项卡?

如何将按钮添加到功能区(C#)上预先存在的选项卡?,c#,ribbon,outlook-addin,outlook-2010,C#,Ribbon,Outlook Addin,Outlook 2010,我已成功创建了一个新选项卡,并将其放在现有选项卡的旁边。然后我意识到我只有一个按钮,所以(现在)把它放在主页标签上更有意义。但这并没有真正起作用 我试着跟着导游走。我得到了一个XML,并将其XML更改为以下内容 <tabs> <!--<tab idMso="TabAddIns">--> <tab idMso="TabHome"> <group id="group1" label="Hazaa!"> <b

我已成功创建了一个新选项卡,并将其放在现有选项卡的旁边。然后我意识到我只有一个按钮,所以(现在)把它放在主页标签上更有意义。但这并没有真正起作用

我试着跟着导游走。我得到了一个XML,并将其XML更改为以下内容

<tabs>
  <!--<tab idMso="TabAddIns">-->
  <tab idMso="TabHome">
    <group id="group1" label="Hazaa!">
      <box id="box1" />
    </group>
  </tab>
</tabs>

当我运行项目时,UI没有变化,因此我猜:

  • XML根本不被读取
  • 名称
    TabHome
    错误(至少对于Outlook 2010而言)
  • 属性
    idMso
    错误(至少对于Outlook 2010而言)或
  • 上述任何一项的其他/组合

  • 我能做些什么来改变色带?(Outlook 2010/VSTO/VS 2010/.NET 4)。

    属性
    idMso
    正确,但所需选项卡的id为
    TabMail
    。您可以在MSDN上找到。然后,如问题的注释中所述,示例XML可能缺少customUI和ribbon标记。(免责声明:我没有在Outlook中自定义功能区,只有Word、Excel和PowerPoint,但我想它们的工作原理是一样的?)

    尝试以下类似的方法:

    <?xml version="1.0" encoding="UTF-8"?>
    <customUI xmlns="http://schemas.microsoft.com/office/2009/07/customui">
        <ribbon>
            <tabs>
                <tab idMso="TabMail">
                    <group id="group1" label="Hazaa!">
                        <box id="box1" />
                    </group>
                </tab>
            </tabs>
        </ribbon>
    </customUI>
    

    已编辑。抱歉,提供了dnn链接。你想要办公室,你想要c

    下面是VBA中的StackOverflow答案。。。

    用C#翻译成

    [Lib "oleacc.dll"]
    Long AccessibleChildren(object paccContainer, 
                            long iChildStart, 
                            long cChildren, 
                            object rgvarChildren, 
                            long pcObtained)...
    
    我从未试过,所以不确定它是否有效


    从所有其他文档中,您似乎只需获取ribbon对象,并在其中迭代(使用foreach)所有子对象,如果您只想在Visual Studio中的现有ribbon中显示按钮,请单击此处


    在您的情况下,将OfficeId更改为TabMail

    对于其他答案似乎都不起作用而感到沮丧的人,请转到功能区本身的属性,并将
    RibbonType
    设置为
    Microsoft.Outlook.Explorer
    (或您希望在其中看到控件的任何上下文)。这是一个很容易被忽视的关键步骤

    然后按照其他说明将
    OfficeId
    设置为
    TabMail


    此外,可以在此处找到Office 2016 Fluent控件标识符:

    以上是完整的XML吗?rootnode应该有一个
    标记,里面应该有一个
    标记,不是吗?否则,我认为Outlook将忽略您的XML代码。换句话说,备选方案1。是的,我也有。只是不想发布大量的文本。我的假设是名称指向错误的选项卡(或者根本没有)。正如我对你精彩的回答所作的评论,这个假设被证明是正确的,就是这样。我可以补充一句,这很有道理。供将来参考-如何列出Outlook/Word/任何其他ribbonized软件中当前安装/可见/可用的所有选项卡的所有名称?我在某个地方看到了一个提示,我可以去QAT并在工具提示中检查它们,但这只适用于选项卡中的组件。选项卡本身没有显示工具提示…我想msdn上的某个地方有它的参考,但我现在找不到它…顺便说一句,你可以通过单击答案旁边的复选标记将问题标记为已回答,如果你愿意,可以向上投一票。是的,我希望如此。我只是想查找一些额外的信息,以便下一个遇到这个问题的可怜的灵魂不必再问后续问题。我试图在谷歌上搜索一些常用的标签名称,但这并没有给我任何列表链接。有人建议我下载一个包含所有名称的文件,但它是一个EXE,我看不出将文本文件作为可执行文件分发有什么意义,所以我假设这个提示是错误的或被误解的,直到有人告诉我不是这样。也许可以帮你提供第三方选项卡的ID?如果你能让它工作,请在这里留下评论。。。
    [Lib "oleacc.dll"]
    Long AccessibleChildren(object paccContainer, 
                            long iChildStart, 
                            long cChildren, 
                            object rgvarChildren, 
                            long pcObtained)...