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

Posted

技术标签:

【中文标题】如何将按钮添加到功能区(C#)上预先存在的选项卡?【英文标题】:How to add a button to a pre-existing tab on ribbon (C#)? 【发布时间】:2012-09-11 11:22:31 【问题描述】:

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

我已尝试按照指南和步道进行操作。我得到了一个 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)或 上述任何一项的其他/组合。

我可以做些什么来改变功能区? (展望 2010/VSTO/VS 2010/.NET 4)。

【问题讨论】:

以上是完整的XML吗?应该有一个&lt;customUI&gt;标签作为根节点,里面应该有一个&lt;ribbon&gt;标签,不是吗?否则我认为 Outlook 将忽略您的 XML 代码。换句话说,备选方案#1。 是的,我也有这些。只是不想发布大量的文字。我的假设是该名称针对错误的选项卡(或根本没有)。正如我评论您的精彩回复时,事实证明这个假设是正确的。 【参考方案1】:

idMso 属性是正确的,但是你想要的标签的 id 是TabMail。您可以在 MSDN 上找到packed set of Excel-files containing lists of Office 2010 control IDs。然后,如对该问题的评论中所述,您的示例 XML 可能缺少 customUI 和功能区标签。 (免责声明:我没有在 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>

【讨论】:

的。非常有问题,我可以补充一下。供将来参考 - 如何列出 Outlook/Word/任何其他功能区化软件中当前安装/可见/可用的所有选项卡的所有名称?我在某处看到了一个提示,我可以去 QAT 并在工具提示中检查它们,但这仅对标签内部的组件有用。选项卡本身没有显示任何工具提示... 我认为msdn上的某处有它的参考,但我现在找不到它...... 顺便说一句,您可以通过单击答案旁边的复选标记将问题标记为已回答,如果您愿意,可以点赞。 也许this Q+A 可以帮助您获取第三方标签的 ID?如果你让它工作,请在此处发表评论...... 这里的链接不再有效是一个很好的资源github.com/OfficeDev/office-fluent-ui-command-identifiers【参考方案2】:

如果您只想在现有功能区中显示一个按钮,请在 Visual Studio 中,此处为https://msdn.microsoft.com/en-us/library/bb608628.aspx#Anchor_2

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

【讨论】:

【参考方案3】:

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

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

此外,Office 2016 Fluent Control Identifiers 可以在这里找到:https://www.microsoft.com/en-us/download/confirmation.aspx?id=50745

【讨论】:

【参考方案4】:

已编辑。对不起,给了一个dnn链接。你想要办公室,你想要 c#。

这是 VBA 中的 *** 答案... How to get Ribbon custom Tabs IDs?

AccessibleChildren _
            Lib "oleacc.dll" _
                (ByVal paccContainer As Object, _
                 ByVal iChildStart As Long, _
                 ByVal cChildren As Long, _
                       rgvarChildren As Variant, _
                       pcObtained As Long) _
            As Long

在 C# 中翻译成

[Lib "oleacc.dll"]
Long AccessibleChildren(object paccContainer, 
                        long iChildStart, 
                        long cChildren, 
                        object rgvarChildren, 
                        long pcObtained)...

我从未尝试过,所以不确定它是否有效。

从所有其他文档中,您似乎只需获取功能区对象,并在其中迭代(使用 foreach)所有子对象

【讨论】:

以上是关于如何将按钮添加到功能区(C#)上预先存在的选项卡?的主要内容,如果未能解决你的问题,请参考以下文章

如何将按钮功能添加到片段中

将 Js 加载项添加到由 VSTO 加载项创建的自定义功能区选项卡

如何使用嵌套的底部选项卡导航器将导航按钮添加到 React 导航堆栈标题?

将按钮添加到选项卡和选项卡区域 JavaFX

SwiftUI - 如何将工具栏添加到 NavigationView 内的 TabView 选项卡?

是否可以将 Android 应用程序嵌入到预先存在的应用程序中?