0

我想限制 Word 2007 中功能区组中按钮的数量,因为按钮是根据数据库中的数据生成的。见下图。显示的按钮太多. 我想在带有对话框启动器的功能区中设置有限的数量,例如 6 个左右,单击该对话框启动器将打开一个显示所有按钮的窗格。有没有办法做同样的事情。当有人单击对话框启动器时,有人还可以告诉我如何创建该窗格吗?

4

1 回答 1

0

我这样做的方法是将功能区中的一些(比如 6 个)项目作为按钮加载,并将所有项目作为 CustomXMlPart 添加到文档中。在文档中,我添加了一个包含列表框的用户控件。在功能区加载时,我从 CustomXmlPart 中获取所有项目并将它们放入列表框中。在对话框启动器按钮上单击,我显示/隐藏用户控件以显示列表中的所有项目。

以下是详细步骤:-

a) 从数据库中获取所有项目并将其保存在集合中。b) 使用上述集合中的 6 个按钮生成如下所示的功能区 XML:-

<?xml version="1.0" encoding="utf-8"?>
<customUI xmlns="http://schemas.microsoft.com/office/2006/01/customui" onLoad="RibbonLoad">
  <ribbon>
    <tabs>
      <tab id="tabMyTab" label="MyTab">
        <group id="grpItems" label="My items">
          <button id="test1" label="test1"/>
          <button id="test2" label="test2"/>
          <button id="test3" label="test3"/>
          <button id="test4" label="test4"/>
          <button id="test5" label="test5"/>
          <button id="test6" label="test6"/>
          <dialogBoxLauncher>
            <button id="btnShowAllItems" label="Show all custom tags" onAction="ShowAllItems" />
          </dialogBoxLauncher>
        </group>
      </tab>
    </tabs>
  </ribbon>
</customUI>

c) 将集合作为 CustomXMLPart 添加到文档中:-

static void AddCustomTableXmlPart(WordprocessingDocument document)
{
            MainDocumentPart mainDocumentPart = document.MainDocumentPart;
            XDocument customTagsXml = GetAllItemsAsCustomXML();

            if (mainDocumentPart.GetPartsCountOfType<CustomXmlPart>() > 0)
                mainDocumentPart.DeleteParts<CustomXmlPart>(mainDocumentPart.CustomXmlParts);

            //Add a new customXML part and then add content
            var customXmlPart = mainDocumentPart.AddCustomXmlPart(CustomXmlPartType.CustomXml);

            //copy the XML into the new part...
            using (var ts = new StreamWriter(customXmlPart.GetStream()))
            {
                ts.Write(customTagsXml.ToString());
                ts.Flush();
            }
 }

d) 转到您的docm 文件的开发人员选项卡,将一个用户窗体添加到项目并添加一个列表框。编写一个子例程,它将加载已添加到文档的 CustomXMlPart 中的项目,并将这些项目添加到用户窗体中的列表框中。如下所示:-

Sub LoadItems()
     Dim totalItemsCount As Integer
     totalItemsCount = ActiveDocument.CustomXMLParts(ActiveDocument.CustomXMLParts.Count).SelectNodes("//Items")(1).ChildNodes.Count
     Dim item As String

     For i = 1 To totalItemsCount
        item = ActiveDocument.CustomXMLParts(ActiveDocument.CustomXMLParts.Count).SelectNodes("//Items")(1).ChildNodes(i).text
        ' I had to remove the spaced before adding it as It was throwing errors
        item = Replace(item, " ", Empty)

        If Len(item) > 1 Then
        ItemUserControl.lstItems.AddItem pvargItem:item
        End If
     Next i
End Sub

e) 定义从功能区的 onLoad 事件调用的名为 RibbonLoad 的子(检查 RibbonXML)。从此 RibbonLoad 子调用 LoadItems 子。

Sub RibbonLoad(ribbon As IRibbonUI)
LoadItems
End Sub

f)定义以下将显示/隐藏用户控件的子。这在 dialogBoxLauncher 按钮的 onAction 上调用。(参见 RibbonXML)

Sub ShowAllItemss(control As IRibbonControl)
    If ItemsUserControl.Visible = False Then
         If ItemsUserControl.lstItems.ListCount = 0 Then
            LoadCustomTags
         End If
         ItemsUserControl.Show
    Else
         ItemsUserControl.Hide
    End If
End Sub
于 2011-01-04T11:09:33.130 回答