Я сделал это, загрузив некоторые (скажем, 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