В WPF нет магии. Все, что происходит, написано где-то. Это VS, который генерирует часть кода.
Код xaml связан с классом.
<Window x:Class="YourNameSpace.MainWindow" ...
VS генерирует для вас файл MainWindow.cs, который имеет класс с именем MainWindow
типа Window
. Тип важен здесь. Если вы используете другой тип, компилятор не будет связывать его с вашим MainWindow.xaml, даже если это правильное имя класса.
В конце концов, для UserControl у вас будет тег xaml <UserControl
вместо тега Window
.
Еще одна вещь, компилятор также генерирует во время компиляции файл с именем MainWindow.g.cs
в папке obj
, где также можно найти MainWindow.baml
скомпилированную версию файла xaml.
Этот файл будет содержать частичный класс MainWindow со всеми объявленными элементами управления, которые вы используете в XAML. Это закулисная работа компилятора, которая не связана с ассоциацией между XAML и относительным классом.
Приложение то же самое, только тип класса меняется. Это для связи XAML с классом.
Для окна запуска оно по умолчанию указано в файле XAML для класса. Однако вы можете настроить файл .cs и выполнить собственную логику в событии ApplicationStartUp.
То же самое для события завершения работы. По умолчанию это когда все ваши окна закрыты, но вы можете изменить его на закрытие MainWindow или явное завершение работы.
csproj (в случае c #) сообщает компилятору, какой класс является приложением.
<ApplicationDefinition Include="App.xaml">
<Generator>MSBuild:Compile</Generator>
<SubType>Designer</SubType>
</ApplicationDefinition>
Не только тег XAML, как заявили другие. Тег определяет только тип класса и не заставляет вашу программу запускаться с этим конкретным классом.
Обзор приложения http://i.msdn.microsoft.com/dynimg/IC144461.png
Вы можете прочитать далее здесь:
MSDN - Создание приложения WPF
MSDN - код позади и XAML в WPF
MSDN - Обзор управления приложениями