Читаем Язык программирования C#9 и платформа .NET5 полностью

Наконец, класс MainWindow определяет и реализует метод по имени InitializeComponent(). Вы могли бы ожидать, что данный метод содержит код, который настраивает внешний вид и поведение каждого элемента управления, устанавливая его разнообразные свойства (Height, Width, Content и т.д.). Однако это совсем не так! Как тогда элементы управления получают корректный пользовательский интерфейс? Логика в методе InitializeComponent() выясняет местоположение встроенного в сборку ресурса, который именован идентично исходному файлу *.xaml:

public void InitializeComponent() {

  if (_contentLoaded) {

    return;

    }

    _contentLoaded = true;

  System.Uri resourceLocater =

    new System.Uri("/WpfTesterApp;component/mainwindow.xaml",

                    System.UriKind.Relative);

    #line 1 "..\..\MainWindow.xaml"

    System.Windows.Application.LoadComponent(this, resourceLocater);

    #line default

    #line hidden

}

Здесь возникает вопрос: что собой представляет этот встроенный ресурс?

<p id="AutBody_Root1102"><strong>Роль BAML</strong></p>

Как и можно было предположить, формат BAML является компактным двоичным представлением исходных данных XAML. Файл *.baml встраивается в виде ресурса (через сгенерированный файл *.g.resources) в скомпилированную сборку. Ресурс BAML содержит все данные, необходимые для настройки внешнего вида и поведения виджетов пользовательского интерфейса (т.е. свойств вроде Height и Width).

Здесь важно понимать, что приложение WPF содержит внутри себя двоичное представление (BAML) разметки. Во время выполнения ресурс BAML извлекается из контейнера ресурсов и применяется для настройки внешнего вида и поведения всех окон и элементов управления.

Вдобавок запомните, что имена таких двоичных ресурсов идентичны именам написанных автономных файлов *.xaml. Тем не менее, отсюда вовсе не следует необходимость распространения файлов *.xaml вместе со скомпилированной программой WPF. Если только не строится приложение WPF, которое должно динамически загружать и анализировать файлы *.xaml во время выполнения, то поставлять исходную разметку никогда не придется.

<p id="AutBody_Root1103"><strong>Разгадывание загадки Main()</strong></p>

Теперь, когда известно, как работает процесс msbuild.exe, откройте файл Арр.g.cs. В нем обнаружится автоматически сгенерированный метод Main(), который инициализирует и запускает ваш объект приложения:

public static void Main() {

  WpfTesterApp.App app = new WpfTesterApp.App();

  app.InitializeComponent();

  app.Run();

}

Метод InitializeComponent() конфигурирует свойства приложения, включая StartupUri и обработчики событий Startup и Exit:

public void InitializeComponent() {

    #line 5 "..\..\App.xaml"

    this.Startup += new System.Windows.StartupEventHandler(this.App_OnStartup);

    #line default

    #line hidden

    #line 5 "..\..\App.xaml"

    this.Exit += new System.Windows.ExitEventHandler(this.App_OnExit);

    #line default

    #line hidden

    #line 5 "..\..\App.xaml"

    this.StartupUri =

      new System.Uri("MainWindow.xaml", System.UriKind.Relative);

    #line default

    #line hidden

}

<p id="AutBody_Root1104"><strong>Взаимодействие с данными уровня приложения</strong></p>

Вспомните, что в классе Application имеется свойство по имени Properties, которое позволяет определить коллекцию пар "имя/значение" посредством индексатора типа. Поскольку этот индексатор предназначен для оперирования на типе System.Object, в коллекцию можно сохранять элементы любого вида (в том числе экземпляры специальных классов) с целью последующего извлечения по дружественному имени. С использованием такого подхода легко разделять данные между всеми окнами в приложении WPF.

В целях иллюстрации вы обновите текущий обработчик события Startup, чтобы он проверял входящие аргументы командной строки на присутствие значения /GODMODE (распространенный мошеннический код во многих играх). Если оно найдено, тогда значение bool по имени GodMode внутри коллекции свойств устанавливается в true (в противном случае оно устанавливается в false).

Перейти на страницу:

Похожие книги

1С: Бухгалтерия 8 с нуля
1С: Бухгалтерия 8 с нуля

Книга содержит полное описание приемов и методов работы с программой 1С:Бухгалтерия 8. Рассматривается автоматизация всех основных участков бухгалтерии: учет наличных и безналичных денежных средств, основных средств и НМА, прихода и расхода товарно-материальных ценностей, зарплаты, производства. Описано, как вводить исходные данные, заполнять справочники и каталоги, работать с первичными документами, проводить их по учету, формировать разнообразные отчеты, выводить данные на печать, настраивать программу и использовать ее сервисные функции. Каждый урок содержит подробное описание рассматриваемой темы с детальным разбором и иллюстрированием всех этапов.Для широкого круга пользователей.

Алексей Анатольевич Гладкий

Программирование, программы, базы данных / Программное обеспечение / Бухучет и аудит / Финансы и бизнес / Книги по IT / Словари и Энциклопедии
1С: Управление торговлей 8.2
1С: Управление торговлей 8.2

Современные торговые предприятия предлагают своим клиентам широчайший ассортимент товаров, который исчисляется тысячами и десятками тысяч наименований. Причем многие позиции могут реализовываться на разных условиях: предоплата, отсрочка платежи, скидка, наценка, объем партии, и т.д. Клиенты зачастую делятся на категории – VIP-клиент, обычный клиент, постоянный клиент, мелкооптовый клиент, и т.д. Товарные позиции могут комплектоваться и разукомплектовываться, многие товары подлежат обязательной сертификации и гигиеническим исследованиям, некондиционные позиции необходимо списывать, на складах периодически должна проводиться инвентаризация, каждая компания должна иметь свою маркетинговую политику и т.д., вообщем – современное торговое предприятие представляет живой организм, находящийся в постоянном движении.Очевидно, что вся эта кипучая деятельность требует автоматизации. Для решения этой задачи существуют специальные программные средства, и в этой книге мы познакомим вам с самым популярным продуктом, предназначенным для автоматизации деятельности торгового предприятия – «1С Управление торговлей», которое реализовано на новейшей технологической платформе версии 1С 8.2.

Алексей Анатольевич Гладкий

Финансы / Программирование, программы, базы данных