使用GetResourceText加载Office功能区对象(按钮/组)时访问它们

时间:2018-08-13 13:04:53

标签: xml ms-office vsto ribbon

我有一个带有2个功能区的VSTO for Word。一个内置在设计器中,我可以使用

从代码中访问它们的属性。
Me.myButton1.label = "My Button Label"; 

但是另一个是动态的,并且已加载

GetResourceText("filename.xml");

其中XML的格式类似于

<?xml version="1.0" encoding="UTF-8"?>
    <customUI xmlns="http://schemas.microsoft.com/office/2009/07/customui" onLoad="Ribbon_Load">
      <ribbon>
        <tabs>
          <tab idMso="TabAddIns" label="My Tab">
            <group id="grpProperties" label="Properties">
              <button id="btnProps" imageMso="PropertySheet" onAction="btnMainForm" label="Change properties" size="large" />
            </group>
          </tab>
        </tabs>
      </ribbon>
    </customUI>

哪个工作正常,两个功能区都显示在Word中。该xml文件包含具有ID的组和按钮。 但是我无法访问它们的属性,因为它们的对象ID未知。如何在代码中访问组或按钮标签?

1 个答案:

答案 0 :(得分:0)

我认为这就是你所追求的。我修改了您的XML,并在C#,VB.NET和VBA中包含了getLabel的回调。

在我的Addins中,将about信息作为一组放在最右边的功能区中。这是我的 GitHub Project ,我从项目设置中加载关于的信息。另外,我使用 Log4Net 记录了已部署的VSTO加载项中的所有错误。您可以将日志文件写入网络上的共享文件夹;我通常只需将其放置在一次单击部署路径的install文件夹下。在日志文件中,您可以捕获版本,计算机名称,用户名等。

screenshot

以下是您的XML(使用Notepad++ XML Tools plugin格式的示例)

<?xml version="1.0" encoding="UTF-8"?>
<customUI xmlns="http://schemas.microsoft.com/office/2009/07/customui" onLoad="Ribbon_Load">
    <ribbon>
        <tabs>
            <tab 
                    idMso="TabAddIns" 
                    label="My Tab"
                    >
                <group 
                        id="grpProperties" 
                        getLabel="GetLabelText"
                        >
                    <button 
                            id="btnProps" 
                            imageMso="PropertySheet" 
                            onAction="btnMainForm" 
                            label="Change properties"
                            size="large" 
                            />
                </group>
            </tab>
        </tabs>
    </ribbon>
</customUI>

标签文字的C#回调

public string GetLabelText(Office.IRibbonControl control)
{
    try
    {
        switch (control.Id)
        {
            case "grpProperties":
                return "My Addin 1.0";
            default:
                return string.Empty;
        }
    }
    catch (Exception)
    {
        return "error";
    }
}

标签文本的VB.NET回调

Public Function GetLabelText(control As Office.IRibbonControl) As String
    Try
        Select Case control.Id
            Case Is = "grpProperties"
                Return "My Addin 1.0"
            Case Else
                Return String.Empty
        End Select

    Catch ex As Exception
        Return "error"

    End Try

End Function

标签文字的VBA回调

Public Sub GetLabelText(control As IRibbonControl, ByRef label)
On Error GoTo ErrTrap

    Select Case control.id
        Case Is = "grpProperties"
            label = "My Addin 1.0"
        Case Else
            label = ""
    End Select

ExitProcedure:
    Exit Sub

ErrTrap:
    label = "error"
    Resume ExitProcedure

End Sub