XAML文件如何与cs文件关联?

时间:2010-06-05 14:33:35

标签: .net wpf xaml

似乎XAML文件在C#项目中应该有相应的.cs文件。我知道Visual Studio为我们做了所有事情。我只是好奇他们是如何联系在一起的?我的意思是,它们是在项目文件中指定的,还是仅仅因为它们具有相同的名称?而且,App.xaml文件指定了启动文件,但编译器如何知道?是否可以指定App.xaml以外的其他文件来执行与App.xaml相同的操作?

2 个答案:

答案 0 :(得分:7)

WPF中没有任何神奇的事情发生。所有发生的事情都写在哪里。这是VS生成一些代码。

xaml代码与类链接。

<Window x:Class="YourNameSpace.MainWindow" ...

VS为您生成一个MainWindow.cs文件,该文件具有MainWindowWindow的类。这种类型很重要。如果使用其他类型,编译器将不会将其链接到MainWindow.xaml,即使它是正确的类名。 最后,对于UserControl,您将使用xaml标记<UserControl而不是Window标记。

还有一件事,编译器还会在编译时在MainWindow.g.cs文件夹中生成一个名为obj的文件,您也可以在其中找到MainWindow.baml xaml文件的编译版本。 此文件将包含一个部分类MainWindow,其中声明了您在XAML中使用的所有控件。这是编译器执行的场景工作的背后,与XAML和相关类之间的关联无关。

应用程序是相同的,只是类类型更改。这是为了将XAML与类相关联。 对于StartUp Window,默认情况下它在XAML文件中指定为类。但是,您可以自定义.cs文件并在ApplicationStartUp事件中执行您自己的逻辑。

Shutdown事件相同。默认情况下,当所有窗口都关闭时,您可以将其更改为MainWindow关闭或显式关闭时。

csproj(在c#的情况下)告诉编译器哪个类是应用程序。

<ApplicationDefinition Include="App.xaml">
  <Generator>MSBuild:Compile</Generator>
  <SubType>Designer</SubType>
</ApplicationDefinition>

不仅像其他人所说的XAML标签。标签只定义类的类型,不要让程序从这个特定的类开始。

Application overview http://i.msdn.microsoft.com/dynimg/IC144461.png

您可以在这里阅读: MSDN - Building WPF application

MSDN - Code-Behind and XAML in WPF

MSDN - Application Management Overview

答案 1 :(得分:3)

后面的代码定义了一个派生自WindowUserControl,......的类,然后XAML的根元素引用具有x:Class属性的类型。

App.xaml是启动,因为它有一个<Application>根元素,使用相同的机制来引用后面的代码。