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

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

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

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

Разгадывание загадки Main

Теперь, когда известно, как работает процесс 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

}

Взаимодействие с данными уровня приложения

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

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

Звучит достаточно просто, но как передать обработчику события Startup входные аргументы командной строки (обычно получаемые методом Main)? Один из подходов предусматривает вызов статического метода Environment.GetCommandLineArgs. Однако те же самые аргументы автоматически добавляются во входной параметр StartupEventArgs и доступны через свойство Args. Ниже приведена первая модификация текущей кодовой базы:


private void App_OnStartup(object sender, StartupEventArgs e)

{

  Application.Current.Properties["GodMode"] = false;

  // Проверить входные аргументы командной строки

  // на предмет наличия флага /GODMODE.

  foreach (string arg in e.Args)

  {

    if (arg.Equals("/godmode",StringComparison.OrdinalIgnoreCase))

    {

      Application.Current.Properties["GodMode"] = true;

      break;

    }

  }

}


Данные уровня приложения доступны из любого места внутри приложения WPF. Для обращения к ним потребуется лишь получить точку доступа к глобальному объекту приложения (через Application.Current) и просмотреть коллекцию. Например, обработчик события Click для кнопки можно было бы изменить следующим образом:


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

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

Программирование. Принципы и практика использования C++ Исправленное издание
Программирование. Принципы и практика использования C++ Исправленное издание

Специальное издание самой читаемой и содержащей наиболее достоверные сведения книги по C++. Книга написана Бьярне Страуструпом — автором языка программирования C++ — и является каноническим изложением возможностей этого языка. Помимо подробного описания собственно языка, на страницах книги вы найдете доказавшие свою эффективность подходы к решению разнообразных задач проектирования и программирования. Многочисленные примеры демонстрируют как хороший стиль программирования на С-совместимом ядре C++, так и современный -ориентированный подход к созданию программных продуктов. Третье издание бестселлера было существенно переработано автором. Результатом этой переработки стала большая доступность книги для новичков. В то же время, текст обогатился сведениями и методиками программирования, которые могут оказаться полезными даже для многоопытных специалистов по C++. Не обойдены вниманием и нововведения языка: стандартная библиотека шаблонов (STL), пространства имен (namespaces), механизм идентификации типов во время выполнения (RTTI), явные приведения типов (cast-операторы) и другие. Настоящее специальное издание отличается от третьего добавлением двух новых приложений (посвященных локализации и безопасной обработке исключений средствами стандартной библиотеки), довольно многочисленными уточнениями в остальном тексте, а также исправлением множества опечаток. Книга адресована программистам, использующим в своей повседневной работе C++. Она также будет полезна преподавателям, студентам и всем, кто хочет ознакомиться с описанием языка «из первых рук».

Бьёрн Страуструп , Ирина Сергеевна Козлова , Бьерн Страуструп , Валерий Федорович Альмухаметов

Программирование, программы, базы данных / Базы данных / Программирование / Учебная и научная литература / Образование и наука / Книги по IT
97 этюдов для архитекторов программных систем
97 этюдов для архитекторов программных систем

Успешная карьера архитектора программного обеспечения требует хорошего владения как технической, так и деловой сторонами вопросов, связанных с проектированием архитектуры. В этой необычной книге ведущие архитекторы ПО со всего света обсуждают важные принципы разработки, выходящие далеко за пределы чисто технических вопросов.?Архитектор ПО выполняет роль посредника между командой разработчиков и бизнес-руководством компании, поэтому чтобы добиться успеха в этой профессии, необходимо не только овладеть различными технологиями, но и обеспечить работу над проектом в соответствии с бизнес-целями. В книге более 50 архитекторов рассказывают о том, что считают самым важным в своей работе, дают советы, как организовать общение с другими участниками проекта, как снизить сложность архитектуры, как оказывать поддержку разработчикам. Они щедро делятся множеством полезных идей и приемов, которые вынесли из своего многолетнего опыта. Авторы надеются, что книга станет источником вдохновения и руководством к действию для многих профессиональных программистов.

Нил Форд , Билл де Ора , Майкл Хайгард

Программирование, программы, базы данных / Базы данных / Программирование / Книги по IT