XAML 或 C# 代码隐藏 - 编译时首先处理什么?

Phi*_*aus 0 c# wpf xaml

我正在 WPF 上构建。现在,我反复遇到的一个问题是,我不清楚首先编译/评估哪一部分:XAML 或 C# CodeBehind。我无法弄清楚,因为我的代码在声明和分配事物的故障安全方面“臃肿”。

我找到了有关 Silverlight 的旧答案,但 XAML 规范表示任何实现都完全依赖于框架 - 并且我没有找到 WPF 的正确解释。

有人能澄清一下吗?谢谢!

Eld*_*asp 7

XAML 根本无法编译。当您编辑 XAML 时,XAML 设计器会自动创建“*.gics”文件。您可以像这样转到该文件的代码:

  • 转到窗口构造函数;
  • 将键盘光标移至InitializeComponent
  • 按 F12。

该文件包含分部类的代码。问题:哪些部分类文件将被编译?- 不完全正确。这样想:在编译之前,分部类的所有文件都被(虚拟地)合并到一个文件中。编译器将它们视为一个整体。

在类中声明成员的顺序很少重要,因此文件合并的顺序也并不重要。唯一重要的地方是相互引用的静态成员(实际上,只有字段)的初始化。如果你的代码中有这样的东西,那么相应的成员需要按顺序写入一个文件中,或者在静态构造函数中显式设置它们的初始化顺序。

您很可能对一个稍微不同的问题感兴趣:XAML 和 CodeBehind 生成的代码按什么顺序执行?如果您查看从 XAML 生成的 Sharpe 文件,您将看到它由声明字段并在方法中初始化它们组成InitializeComponent()

对该InitializeComponent()方法的调用发生在 Window 构造函数中。在调用它之前,字段为空。在调用期间,将完全执行 XAML 中指定的代码。一旦调用,您就可以安全地引用 XAML 中定义的任何元素。