Язык программирования C#9 и платформа .NET5 - Троелсен Эндрю
#line 20 "....MainWindow.xaml"
this.MyCalendar.SelectedDatesChanged += new
System.EventHandler<System.Windows.Controls.SelectionChangedEventArgs>(
this.MyCalendar_OnSelectedDatesChanged);
Он сообщает инфраструктуре о том, что элементу управления в строке 20 файла XAML назначен обработчик события
SelectedDatesChanged
Наконец, класс
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
}
Здесь возникает вопрос: что собой представляет этот встроенный ресурс?
Роль BAML
Как и можно было предположить, формат BAML является компактным двоичным представлением исходных данных XAML. Файл
*.baml
*.g.resources
Height
Width
Здесь важно понимать, что приложение WPF содержит внутри себя двоичное представление (BAML) разметки. Во время выполнения ресурс BAML извлекается из контейнера ресурсов и применяется для настройки внешнего вида и поведения всех окон и элементов управления.
Вдобавок запомните, что имена таких двоичных ресурсов идентичны именам написанных автономных файлов
*.xaml
*.xaml
*.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
В целях иллюстрации вы обновите текущий обработчик события
Startup
/GODMODE
bool
GodMode
true
false
Звучит достаточно просто, но как передать обработчику события
Startup
Main()
Environment.GetCommandLineArgs()
StartupEventArgs
Args