Как файлы XAML ассоциируются с файлами cs? - PullRequest
2 голосов
/ 05 июня 2010

Кажется, что файлы XAML должны иметь соответствующие файлы .cs в проекте C #. Я знаю, что Visual Studio делает все для нас. Мне просто любопытно, как они связаны друг с другом? Я имею в виду, они указаны в файле проекта, или просто потому, что они имеют одинаковые имена? Кроме того, файл App.xaml определяет файл запуска, но как узнает компилятор? Можно ли назначить другой файл, отличный от App.xaml, чтобы выполнять те же действия, что и App.xaml?

Ответы [ 2 ]

7 голосов
/ 05 июня 2010

В 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 - Обзор управления приложениями

3 голосов
/ 05 июня 2010

Код позади определяет класс, полученный из Window, UserControl, ..., а затем корневой элемент XAML ссылается на этот тип с атрибутом x:Class.

App.xaml - это запуск, поскольку он имеет корневой элемент <Application>, используя тот же механизм для ссылки на код.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...