Язык программирования C#9 и платформа .NET5 - Троелсен Эндрю
#line 20 "....MainWindow.xaml"this.MyCalendar.SelectedDatesChanged += new System.EventHandler<System.Windows.Controls.SelectionChangedEventArgs>( this.MyCalendar_OnSelectedDatesChanged);Он сообщает инфраструктуре о том, что элементу управления в строке 20 файла XAML назначен обработчик события
SelectedDatesChangedНаконец, класс
MainWindowInitializeComponent()HeightWidthContentInitializeComponent()*.xamlpublic 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}Здесь возникает вопрос: что собой представляет этот встроенный ресурс?
Роль BAML
Как и можно было предположить, формат BAML является компактным двоичным представлением исходных данных XAML. Файл
*.baml*.g.resourcesHeightWidthЗдесь важно понимать, что приложение WPF содержит внутри себя двоичное представление (BAML) разметки. Во время выполнения ресурс BAML извлекается из контейнера ресурсов и применяется для настройки внешнего вида и поведения всех окон и элементов управления.
Вдобавок запомните, что имена таких двоичных ресурсов идентичны именам написанных автономных файлов
*.xaml*.xaml*.xamlРазгадывание загадки Main()
Теперь, когда известно, как работает процесс
msbuild.exeАрр.g.csMain()public static void Main() { WpfTesterApp.App app = new WpfTesterApp.App(); app.InitializeComponent(); app.Run();}Метод
InitializeComponent()StartupUriStartupExitpublic 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}Взаимодействие с данными уровня приложения
Вспомните, что в классе
ApplicationPropertiesSystem.ObjectВ целях иллюстрации вы обновите текущий обработчик события
Startup/GODMODEboolGodModetruefalseЗвучит достаточно просто, но как передать обработчику события
StartupMain()Environment.GetCommandLineArgs()StartupEventArgsArgs