Пошаговое руководство. Привязка элементов управления содержимым к пользовательским XML-частям
В данном пошаговом руководстве описаны способы привязки элементов управления содержимым в настройках на уровне документа Word к данным XML, хранящимся в документе.
Применение. Сведения этого раздела применяются к проектам уровня документа для Word 2013 и Word 2010. Дополнительные сведения см. в разделе Доступность функций по типам приложений Office и проектов.
Word позволяет хранить данные XML, называемые пользовательской XML-частью в документе.Можно управлять отображением этих данных с помощью привязки элементов управления к элементам в пользовательской XML-части.Пример документа в этом руководства отображает данные о сотрудниках, которые хранятся в пользовательской XML-части.При открытии документа элементы управления содержимым отображают значения XML-элементов.Все изменения текста в элементах управления содержимым сохраняются в пользовательской XML-части.
В данном пошаговом руководстве рассмотрены следующие задачи:
Добавление элементов управления содержимым в документ Word в проекте уровня документа во время разработки.
Создание файла данных XML и схемы XML, определяющей элементы, которые необходимо привязать к элементам управления содержимым.
Прикрепление схемы XML к документу во время разработки.
Добавление содержимого файла XML к пользовательской XML-части в документе во время выполнения.
Привязка элементов управления содержимым к элементам пользовательской XML-части.
Привязка элемента управления DropDownListContentControl к набору значений, заданных в схеме XML.
Примечание |
---|
На вашем компьютере названия некоторых элементов интерфейса пользователя Visual Studio или их расположение могут отличаться от указанных в нижеследующих инструкциях. Это зависит от имеющегося выпуска Visual Studio и используемых параметров. Дополнительные сведения см. в разделе Параметры Visual Studio. |
Обязательные компоненты
Ниже приведены компоненты, необходимые для выполнения данного пошагового руководства.
-
Выпуск Visual Studio 2012, включающий инструменты разработчика Microsoft Office. Дополнительные сведения см. в разделе [Настройка компьютера для разработки решений Office](bb398242\(v=vs.110\).md).
- Word 2013 или Word 2010.
Видеоверсия этого раздела доступна на веб-странице Video How to: Binding Content Controls to Custom XML Parts.
Создание нового проекта документа Word
Создайте документ Word, который будет использоваться в пошаговом руководстве.
Чтобы создать новый проект документа Word
Создайте проект документа Word с именем EmployeeControls.Создайте новый документ для решения.Дополнительные сведения см. в разделе Практическое руководство. Создание проектов Office в Visual Studio.
Среда Visual Studio откроет новый документ Word в режиме конструктора и добавит проект "EmployeeControls" в Обозреватель решений.
Добавление элементов управления содержимым к документу Word
Создайте таблицу, содержащую три различных типа элементов управления содержимым, в которых пользователь сможет просматривать или редактировать данные о сотруднике.
Добавление элементов управления содержимым к документу
В документе Word, который размещен в конструкторе Visual Studio, на ленте, щелкните вкладку Вставить.
В группе Таблицы нажмите Таблица и вставьте таблицу с 2 столбцами и 3 строками.
Введите текст в первом столбце, как показано ниже.
Имя сотрудника
Дата приема на работу
Заголовок
Во втором столбце таблицы щелкните первую строку (после текста Имя сотрудника).
В ленте щелкните вкладку Разработчик.
Примечание Если вкладка Разработчик не отображается в ленте, то ее следует сначала отобразить.Дополнительные сведения см. в разделе Практическое руководство. Отображение вкладки разработчика на ленте.
В группе Элементы управления нажмите кнопку Текст, чтобы добавить элемент управления PlainTextContentControl в первую ячейку.
Во втором столбце таблицы щелкните вторую строку (после текста Дата приема на работу).
В группе Элементы управления нажмите кнопку Выбор даты, чтобы добавить элемент управления DatePickerContentControl во вторую ячейку.
Во втором столбце таблицы щелкните третью строку (после текста Должность).
В группе Элементы управления нажмите кнопку Раскрывающийся список, чтобы добавить элемент управления DropDownListContentControl в последнюю ячейку.
Это и будет весь интерфейс пользователя для данного проекта.Если запустить проект сейчас, то можно будет ввести текст в первой строке и выбрать дату во второй.Следующий шаг — прикрепление данных, которые необходимо отобразить в документе, к файлу XML.
Создание файла данных XML.
Как правило, данные XML для хранения в настраиваемой XML-части получаются из внешнего источника, например, из фала или базы данных.В ходе данного пошагового руководства будет создан файл данных XML, содержащий данные о сотруднике, помеченные элементами, которые необходимо привязать к элементам управления содержимым в документе.Чтобы обеспечить доступ к данным во время выполнения, следует включить файл XML в сборку ресурсов настройки в качестве ресурса.
Создание файла данных
В меню Проект выберите команду Добавить новый элемент.
Открывается диалоговое окно Добавление нового элемента.
Затем в области Шаблоны выберите XML-файл.
Присвойте файлу имя employees.xml и выберите команду Добавить.
В редакторе кода открывается файл employees.xml.
Замените содержимое файла employees.xml следующим текстом.
<?xml version="1.0" encoding="utf-8" ?> <employees xmlns="https://schemas.microsoft.com/vsto/samples"> <employee> <name>Karina Leal</name> <hireDate>1999-04-01</hireDate> <title>Manager</title> </employee> </employees>
Щелкните файл employees.xml в обозревателе решений.
В окне Свойства выберите свойство Действие при построении и измените его значение на Внедренный ресурс.
На этом шаге XML-файл внедряется в сборку как ресурс при построении проекта.Это позволяет получить доступ к содержимому XML-файла во время выполнения.
Создание схемы XML
Чтобы привязать элемент управления содержимым к одному элементу в пользовательской XML-части, необязательно использовать схему XML.Но чтобы связать элемент управления DropDownListContentControl с набором значений, необходимо создать схему XML, проверяющую файл данных XML, созданный ранее.Схема XML задает возможные значения для элемента title.В данном пошаговом руководстве DropDownListContentControl будет привязан к этому элементу позднее.
Создание схемы XML
В меню Проект выберите команду Добавить новый элемент.
Открывается диалоговое окно Добавление нового элемента.
Затем в области Шаблоны выберите Схема XML.
Назовите схему employees.xsd и нажмите кнопку Добавить.
Откроется окно конструктора схемы.
В обозревателе решений щелкните правой клавишей мыши employees.xsd, а затем выберите команду Просмотреть код.
Замените содержимое файла employees.xsd следующей схемой.
<?xml version="1.0" encoding="utf-8" ?> <xs:schema xmlns="https://schemas.microsoft.com/vsto/samples" targetNamespace="https://schemas.microsoft.com/vsto/samples" xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified"> <xs:element name="employees" type="EmployeesType"></xs:element> <xs:complexType name="EmployeesType"> <xs:all> <xs:element name="employee" type="EmployeeType"/> </xs:all> </xs:complexType> <xs:complexType name="EmployeeType"> <xs:sequence> <xs:element name="name" type="xs:string" minOccurs="1" maxOccurs="1"/> <xs:element name="hireDate" type="xs:date" minOccurs="1" maxOccurs="1"/> <xs:element name="title" type="TitleType" minOccurs="1" maxOccurs="1"/> </xs:sequence> </xs:complexType> <xs:simpleType name="TitleType"> <xs:restriction base="xs:string"> <xs:enumeration value ="Engineer"/> <xs:enumeration value ="Designer"/> <xs:enumeration value ="Manager"/> </xs:restriction> </xs:simpleType> </xs:schema>
Чтобы сохранить файл employees.xml и employees.xsd, в меню Файл выберите команду Сохранить все.
Прикрепление схемы XML к документу
Необходимо прикрепить схему XML к документу, чтобы привязать элемент управления DropDownListContentControl к корректным значениям элемента title.
Прикрепление схемы XML к документу
Активируйте файл EmployeeControls.docx в конструкторе.
В ленте щелкните вкладку Разработчик.
В группе XML нажмите кнопку Схема.
В диалоговом окне Шаблоны и надстройки перейдите на вкладку Схема XML и выберите Добавление схемы.
Найдите схему employees.xsd, созданную ранее и расположенную в папке проекта, и нажмите Открыть.
В диалоговом окне Параметры схемы нажмите кнопку ОК.
Нажмите кнопку ОК, чтобы закрыть диалоговое окно Шаблоны и надстройки.
Открывается область задач Структура ХML.
Закройте область задач Структура ХML.
Добавление пользовательской XML-части к документу
Перед привязкой элементов управления содержимым к элементам XML-файла необходимо добавить его содержимое к новой пользовательской XML-части в документе.
Добавление пользовательской XML-части к документу
В Обозревателе решений щелкните правой кнопкой мыши файл ThisDocument.cs или ThisDocument.vb, а затем нажмите Просмотреть код.
Добавьте в класс ThisDocument следующие объявления.В этом коде объявляются несколько объектов, используемые для добавления пользовательской XML-части к документу.
<Cached()> _ Public employeeXMLPartID As String = String.Empty Private employeeXMLPart As Office.CustomXMLPart Private Const prefix As String = "xmlns:ns='https://schemas.microsoft.com/vsto/samples'"
[CachedAttribute()] public string employeeXMLPartID = string.Empty; private Office.CustomXMLPart employeeXMLPart; private const string prefix = "xmlns:ns='https://schemas.microsoft.com/vsto/samples'";
Добавьте следующий метод в класс ThisDocument.Этот метод получает содержимое файла данных XML, внедренного как ресурс в сборку, и возвращает содержимое в виде строки XML.
Private Function GetXmlFromResource() As String Dim asm As System.Reflection.Assembly = _ System.Reflection.Assembly.GetExecutingAssembly() Dim stream1 As System.IO.Stream = asm.GetManifestResourceStream( _ "EmployeeControls.employees.xml") Using resourceReader As System.IO.StreamReader = _ New System.IO.StreamReader(stream1) If resourceReader IsNot Nothing Then Return resourceReader.ReadToEnd() End If End Using Return Nothing End Function
private string GetXmlFromResource() { System.Reflection.Assembly asm = System.Reflection.Assembly.GetExecutingAssembly(); System.IO.Stream stream1 = asm.GetManifestResourceStream( "EmployeeControls.employees.xml"); using (System.IO.StreamReader resourceReader = new System.IO.StreamReader(stream1)) { if (resourceReader != null) { return resourceReader.ReadToEnd(); } } return null; }
Добавьте следующий метод в класс ThisDocument.Метод AddCustomXmlPart создает новую пользовательскую XML-часть, содержащую XML-строку, которая передается в метод.
Чтобы убедиться, что пользовательская XML-часть создается только один раз, метод создает пользовательскую XML-часть только, если такая часть с соответствующим идентификатором GUID еще не существует в документе.При первом вызове этого метода значение свойства Id сохраняется в строке employeeXMLPartID.Значение строки employeeXMLPartID сохраняется в документе, потому что она была объявлена с помощью атрибута CachedAttribute.
Private Sub AddCustomXmlPart(ByVal xmlData As String) If xmlData IsNot Nothing Then employeeXMLPart = Me.CustomXMLParts.SelectByID(employeeXMLPartID) If (employeeXMLPart Is Nothing) Then employeeXMLPart = Me.CustomXMLParts.Add(xmlData) employeeXMLPart.NamespaceManager.AddNamespace("ns", _ "https://schemas.microsoft.com/vsto/samples") employeeXMLPartID = employeeXMLPart.Id End If End If End Sub
private void AddCustomXmlPart(string xmlData) { if (xmlData != null) { employeeXMLPart = this.CustomXMLParts.SelectByID(employeeXMLPartID); if (employeeXMLPart == null) { employeeXMLPart = this.CustomXMLParts.Add(xmlData); employeeXMLPart.NamespaceManager.AddNamespace("ns", @"https://schemas.microsoft.com/vsto/samples"); employeeXMLPartID = employeeXMLPart.Id; } } }
Привязка элементов управления содержимым к элементам пользовательской XML-части
Привяжите все элементы управления содержимым к элементу в пользовательской XML-части, используя свойство XMLMapping каждого элемента управления.
Привязка элементов управления содержимым к элементам пользовательской XML-части
Добавьте следующий метод в класс ThisDocument.Этот метод привязывает каждый элемент управления содержимым к элементу в пользовательской XML-части и задает формат отображения даты элемента управления DatePickerContentControl.
Private Sub BindControlsToCustomXmlPart() Dim xPathName As String = "ns:employees/ns:employee/ns:name" Me.PlainTextContentControl1.XMLMapping.SetMapping(xPathName, _ prefix, employeeXMLPart) Dim xPathDate As String = "ns:employees/ns:employee/ns:hireDate" Me.DatePickerContentControl1.DateDisplayFormat = "MMMM d, yyyy" Me.DatePickerContentControl1.XMLMapping.SetMapping(xPathDate, _ prefix, employeeXMLPart) Dim xPathTitle As String = "ns:employees/ns:employee/ns:title" Me.DropDownListContentControl1.XMLMapping.SetMapping(xPathTitle, _ prefix, employeeXMLPart) End Sub
private void BindControlsToCustomXmlPart() { string xPathName = "ns:employees/ns:employee/ns:name"; this.plainTextContentControl1.XMLMapping.SetMapping(xPathName, prefix, employeeXMLPart); string xPathDate = "ns:employees/ns:employee/ns:hireDate"; this.datePickerContentControl1.DateDisplayFormat = "MMMM d, yyyy"; this.datePickerContentControl1.XMLMapping.SetMapping(xPathDate, prefix, employeeXMLPart); string xPathTitle = "ns:employees/ns:employee/ns:title"; this.dropDownListContentControl1.XMLMapping.SetMapping(xPathTitle, prefix, employeeXMLPart); }
Запуск кода при открытии документа
Создайте пользовательскую XML-часть и привяжите пользовательские элементы управления к данным при открытии документа.
Запуск кода при открытии документа
Добавьте следующий код в метод ThisDocument_Startup класса ThisDocument.Этот код получает строку XML из файла employees.xml, добавляет строку XML к новой пользовательской XML-части в документе и привязывает элементы управления содержимым к элементам в пользовательской XML-части.
Dim xmlData As String = GetXmlFromResource() If xmlData IsNot Nothing Then AddCustomXmlPart(xmlData) BindControlsToCustomXmlPart() End If
string xmlData = GetXmlFromResource(); if (xmlData != null) { AddCustomXmlPart(xmlData); BindControlsToCustomXmlPart(); }
Проверка проекта
При открытии документа элементы управления содержимым отображают данные элементов пользовательской XML-части.Можно щелкнуть элемент управления DropDownListContentControl, чтобы выбрать одно из трех корректных значений элемента title, которые определены в файле employees.xsd.При редактировании данных в любом элементе управления содержимым новые значения сохраняются в пользовательской XML-части в документе.
Тестирование элементов управления содержимым
Чтобы запустить проект, нажмите клавишу F5.
Убедитесь, что таблица в документе соответствует описанной далее таблице.Каждая строка во втором столбце берется из элемента в пользовательской XML-части в документе.
Имя сотрудника
Карина Лил
Дата приема на работу
1 апреля 1999 г
Заголовок
Руководитель
Щелкните ячейку справа от ячейки Имя сотрудника и введите другое имя.
Щелкните ячейку справа от ячейки Должность и выберите другую дату в элементе управления выбора даты.
Щелкните ячейку справа от ячейки Должность и выберите новый элемент из раскрывающегося списка.
Сохраните и закройте документ.
В обозревателе файлов, открыть папку под \ debug \ положение расположением проекта.
Щелкните правой кнопкой мыши файл EmployeeControls.docx и выберите пункт Переименовать.
Назовите файл EmployeeControls.docx.zip.
Документ EmployeeControls.docx сохраняется в формате Open XML.Если добавить к имени документа расширение ZIP-файла, можно изучить содержимое документа.Дополнительные сведения об Open XML см. в технической статье Основные сведения о формате файлов Open XML.
Дважды щелкните файл EmployeeControls.docx.zip.
Дважды щелкните папку customXml.
Щелкните правой кнопкой мыши item2.xml и выберите пункт Открыть.
Этот файл содержит пользовательскую XML-часть, добавленную к документу.
Убедитесь, что элементы name, hireDate и title содержат новые значения, введенные в элементах управления содержимым в документе.
Закройте файл item2.xml.
Следующие действия
Дополнительные сведения об использовании элементов управления содержимым см. в следующих разделах:
Используйте все доступные элементы управления содержимым для создания шаблона.Дополнительные сведения см. в разделе Пошаговое руководство. Создание шаблона с помощью элементов управления содержимым.
Измените данные в пользовательской XML-части, когда документ закрыт.При следующем открытии пользователем этого документа элементы управления содержимым, привязанные к XML-элементам, отобразят новые данные.
Используйте элементы управления содержимым для защиты частей документа.Дополнительные сведения см. в разделе Практическое руководство. Защита частей документов с помощью элементов управления содержимым.
См. также
Задачи
Практическое руководство. Добавление элементов управления содержимым в документы Word
Практическое руководство. Защита частей документов с помощью элементов управления содержимым
Основные понятия
Автоматизация Word с помощью расширенных объектов
Элементы управления содержимым
Общие сведения о ведущих элементах и элементах управления ведущего приложения
Программные ограничения ведущих элементов и элементов управления ведущего приложения
Добавление элементов управления в документы Office во время выполнения