如何将按钮添加到功能区(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吗?应该有一个<customUI>
标签作为根节点,里面应该有一个<ribbon>
标签,不是吗?否则我认为 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 导航堆栈标题?