【问题标题】:How do XAML files associate with cs files?XAML 文件如何与 cs 文件关联?
【发布时间】:2019-07-29 03:09:45
【问题描述】:

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

【问题讨论】:

  • 请不要重复标题中的标签(C# WPF)。
  • 注意,相同的机制用于在 WPF+VB 项目中关联 VB 代码,这里没有特定于 C# 的内容(假设您将“.cs”替换为“.vb”的示例文件名")。

标签: .net wpf xaml


【解决方案1】:

WPF 中并没有发生什么神奇的事情。所有发生的事情都写在某个地方。生成部分代码的是 VS。

xaml 代码与一个类相关联。

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

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

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

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

对于 Shutdown 事件也是如此。默认情况下,它是关闭所有窗口的时间,但您可以将其更改为关闭 MainWindow 或显式关闭的时间。

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

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

不仅像其他人所说的 XAML 标记。标签只定义了类的类型,不会让你的程序以这个特定的类开始。


(来源:microsoft.com

您可以在此处进一步阅读: MSDN - Building WPF application

MSDN - Code-Behind and XAML in WPF

MSDN - Application Management Overview

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 2014-07-31
      • 1970-01-01
      • 2011-07-05
      • 1970-01-01
      • 2019-08-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多