Урок 27. Разделение формы на несколько файлов

Включение документов

Платформа Workflow Technology поддерживает механизм разделения формы на несколько файлов. Для этого используется тэг <Includes>, который описывается в основном файле и содержит ссылку на дополнительный xml-файл.

<Includes>
  <Include Path="IncludeDocument.xml" />
</Includes>

В момент открытия формы платформа парсит xml-файл и загружает включаемые документы, копируя их содержимое в экземпляр класса WorkflowForm, созданный для формы из основного файла. Сами файлы при этом никак не изменяются.

Механизм включения документов поддерживает любой уровень вложенности. Если в цепочке вложений файл будет упоминаться несколько раз, то он все равно будет загружен только один раз.

Разбиение формы на несколько файлов можно использовать в разных случаях. Например:

  • создание файла стилей, чтобы не дублировать тэг <Appearance> во всех файлах форм;

  • вынесение общих условий или команд. Например, можно вынести условия и команды, связанные с паттерном onClose.

Файл стилей

Создадим файл формы _TemplateAppearance.xml, который будет выступать в качестве источника стилей и цветов для остальных форм. Добавим в него только описание тэга <Appearance>. Полный код файла будет иметь вид:

_TemplateAppearance.xml
<?xml version="1.0"?>
<Form Name="NewForm" Title="FormTitle" Width="800" Height="600" StartPosition="CenterScreen" FontStyle="TitleFont" ForeColor="Black" StatusBar="True" MaximizeBox="False">
  <Appearance>
    <Colors>
      <Color Name="ThemeForeColor" Red="0" Green="0" Blue="0" Alpha="255" />
      <Color Name="ThemeBackgroundColor" Red="255" Green="255" Blue="255" Alpha="255" />
      <Color Name="ThemeFlatColor" Red="255" Green="0" Blue="0" Alpha="255" />
      <Color Name="ThemeSeparateBackgroundColor" Red="225" Green="225" Blue="225" Alpha="255" />

      <Color Name="HeadBackgroundColor" Red="221" Green="232" Blue="246" Alpha="255" />
      <Color Name="HeadForeColor" Red="70" Green="70" Blue="70" Alpha="255" />

      <Color Name="LabelForeColor" Red="100" Green="100" Blue="100" Alpha="255" />
      <Color Name="TableBackgroundColor" Red="200" Green="200" Blue="200" Alpha="255" />
      <Color Name="TableArchiveColor" Red="230" Green="230" Blue="230" Alpha="255" />

      <!-- Стили кнопок -->
      <Color Name="ButtonFlatBorderColor" Red="225" Green="225" Blue="225" Alpha="255" />
      <Color Name="ButtonFlatMouseDownBackColor" Red="201" Green="219" Blue="241" Alpha="255" />
      <Color Name="ButtonFlatMouseOverBackColor" Red="228" Green="237" Blue="248" Alpha="255" />
    </Colors>

    <FontStyles>
      <FontStyle Name="ThemeFontStyle" Font="Segoe UI" Size="9" />
      <FontStyle Name="HeadFontStyle" Font="Segoe UI" Size="15" />
      <FontStyle Name="LabelFontStyle" Font="Segoe UI" Size="9" Italic="True" />
      <FontStyle Name="ButtonFontStyle" Font="Segoe UI" Size="10" />
    </FontStyles>
  </Appearance>  
</Form>

Значения атрибутов тэга <Form> не будут играть никакой роли, так как файл будет выступать источником вложенных тэгов.

Перейдем в файл формы настроек пользователя (TemplateUserSettings.xml), в котором удалим тэг <Appearance> и вместо него добавим тэг <Includes>:

В качестве значения атрибута Path тэга <Include> укажем имя нашего файла стилей.

Запустите приложение и проверьте отображение формы пользовательских настроек.

Вынесение общих условий или команд

Создадим файл _TemplateOnClose.xml, в который из файла TemplateUserSettings.xml перенесем:

  • условия FormClosingCondition, EscapeKeyDownCondition, FormChangedEqualCondition и MandatoryFieldsAreFilledEqualCondition;

  • команды FormCloseCommand, SaveOnCloseMessageBoxCommand и CloseOnCloseMessageBoxCommand;

  • а также весь тэг <Executions>, так как все Execution связаны с паттерном onClose.

Полный код файла _TemplateOnClose

Вернемся в файл TemplateUserSettings.xml и добавим тэг <Include> с именем нового файла:

Запустите приложение и проверьте отображение формы пользовательских настроек.

Переделайте файл настроек (TemplateSettings.xml) таким же образом. Не забудьте в файл _TemplateAppearance.xml добавить цвет TabMouseOverBackColor.

Last updated