11

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

我试图按照指南和步行槽。我得到了一个 XML,并将其 XML 更改为以下内容。

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

当我运行该项目时,我的 UI 没有任何变化,所以我猜是:

  1. 根本不读取 XML,
  2. 名称TabHome错误(至少对于 Outlook 2010),
  3. 属性idMso错误(至少对于 Outlook 2010)或
  4. 上述任何一项的其他/组合。

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

4

4 回答 4

20

该属性idMso是正确的,但您想要的选项卡的 id 是TabMail. 您可以在 MSDN 上找到一组包含 Office 2010 控件 ID 列表的 Excel 文件。然后,如对该问题的评论中所述,您的示例 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>
于 2012-09-19T11:42:52.190 回答
2

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

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

于 2015-12-01T02:39:33.520 回答
1

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

然后按照其他说明设置OfficeIdTabMail

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

于 2019-07-25T14:15:16.510 回答
0

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

这是 VBA 中的 StackOverflow 答案... 如何获取功能区自定义选项卡 ID?

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)所有子对象

于 2014-06-19T21:26:24.513 回答