代码之家  ›  专栏  ›  技术社区  ›  LLS

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

  •  2
  • LLS  · 技术社区  · 14 年前

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

    2 回复  |  直到 9 年前
        1
  •  7
  •   NotARobot    9 年前

    WPF里没有魔法。所有发生的事情都写在一些地方。是vs生成了一些代码。

    XAML代码与类链接。

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

    vs为您生成一个mainwindow.cs文件,其中有一个名为 MainWindow 属于 Window 类型。类型在这里很重要。如果使用其他类型,编译器将不会将其链接到mainwindow.xaml,即使它是正确的类名。 最后,对于用户控件,您将拥有XAML标记 <UserControl 而不是 窗口 标签。

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

    应用程序是相同的,只是类类型发生了更改。这是为了将XAML与类链接起来。 对于启动窗口,它在XAML文件中默认指定为类。但是,您可以自定义.cs文件,并在applicationstartup事件中执行您自己的逻辑。

    关闭事件也一样。默认情况下,它是当所有窗口都关闭时,但您可以将其更改为当主窗口关闭或显式关闭时。

    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

        2
  •  3
  •   Richard    14 年前

    代码隐藏定义了一个派生自 Window , UserControl ,…然后,xaml的根元素引用 x:Class 属性。

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