OpenXML - ограничение количества кнопок, отображаемых в группе на пользовательской ленте MS-Word - PullRequest
0 голосов
/ 26 декабря 2010

Я хочу ограничить количество кнопок в группе ленты в Word 2007, так как кнопки генерируются на основе данных в базе данных.Смотрите картинку ниже.Too many buttons showed.Я хотел иметь ограниченное число, скажем, 6 или около того на ленте с помощью диалогового окна запуска, который при нажатии откроет панель, показывающую все кнопки.Есть ли способ сделать то же самое.Может кто-нибудь также сказать мне, как создать эту панель, когда кто-то нажимает на панель запуска диалогового окна?

1 Ответ

0 голосов
/ 04 января 2011

Я сделал это, загрузив некоторые (скажем, 6) элементов на ленте в виде кнопок и добавив все элементы как CustomXMlPart в документ.В документе я добавил пользовательский элемент управления, который содержал список.При загрузке ленты я получаю все элементы из CustomXmlPart и помещаю их в список.При нажатии кнопки запуска диалогового окна я показываю / скрываю пользовательский элемент управления, чтобы показать все элементы в списке.

Ниже приведены подробные шаги: -

a) Получить все элементы избазу данных и хранить это в коллекции.b) Создайте XML-ленту, как показано ниже, с помощью 6 кнопок из вышеуказанной коллекции: -

<?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) Определите подпункт с именем RibbonLoad, который вызывается из события onLoad ленты (проверьте RibbonXML).Вызовите подпрограмму LoadItems из этого подпрограммы RibbonLoad.

Sub RibbonLoad(ribbon As IRibbonUI)
LoadItems
End Sub

f) Определите следующую подпрограмму, которая будет отображать / скрывать пользовательский элемент управления.Это вызывается при включении кнопки dialogBoxLauncher.(см. 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
...