簡體   English   中英

XAML 或 C# 后面的代碼——編譯時首先處理什么?

[英]XAML or C# Code behind - what is processed first at compile time?

我正在構建 WPF。 現在我反復遇到的一個問題是,我不清楚首先編譯/評估哪個部分:XAML 或 C# CodeBehind。 我無法弄清楚,因為我的代碼在聲明和分配事物的故障安全方面“臃腫”。

我找到了關於 Silverlight 的舊答案,但 XAML 規范說任何實現都完全依賴於框架 - 我沒有找到 WPF 的正確解釋。

有人可以清除嗎? 謝謝!

XAML 根本無法編譯。 XAML 設計器會在您編輯 XAML 時自動創建“*.gics”文件。 您可以將 go 寫入此文件的代碼,如下所示:

  • Go 到 window 構造函數;
  • 將鍵盤 cursor 移動到InitializeComponent
  • 按 F12。

此文件包含部分 class 的代碼。 問題:class 部分文件中的哪一個可以編譯? - 不完全正確。 可以這樣想:在編譯之前,將部分 class 的所有文件(虛擬)合並到一個文件中。 編譯器將它們視為一個整體。

在 class 中聲明成員的順序很少重要,因此合並文件的順序也不重要。 唯一重要的地方是初始化 static 成員(實際上,只有字段)相互引用。 如果你的代碼中有這樣的東西,那么對應的成員需要順序寫在一個文件中,或者在 static 構造函數中顯式設置它們的初始化順序。

您很可能對一個稍微不同的問題感興趣:XAML 生成的代碼和 CodeBehind 執行的順序是什么? 如果查看從 XAML 生成的 Sharpe 文件,您將看到它由聲明字段和在InitializeComponent()方法中初始化它們組成。

InitializeComponent()方法的調用發生在 Window 構造函數中。 在調用它之前,字段是 null。 在調用期間,XAML 中指定的代碼的完整執行發生。 調用后,您可以安全地引用 XAML 中定義的任何元素。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM