XAML 在一个典型的MAUI应用程序中,最终的代码隐藏文件是什么样子的?

6vl6ewon  于 2023-02-17  发布在  其他
关注(0)|答案(2)|浏览(186)

我从MAUI Tutorial学到的是XAML文件被翻译成等价的C#代码。(例如BtnClick)定义在按钮上(比如x:Name="BtnEx"),在编译时,它会被转换为BtnEx.Clicked += BtnClick。我还知道,将处理程序与XAML分离通常是一种标准,这样就不会意外地删除它,而是在代码隐藏中定义它。

<Button
    x:Name="CounterBtn"
    Text="Click me"
    SemanticProperties.Hint="Counts the number of times you click"
    Clicked="OnCounterClicked"
    HorizontalOptions="Center" />

代码隐藏文件:

public MainPage()
{
    InitializeComponent();
    CounterBtn.Clicked -= OnCounterClicked; // method definition omitted in MRE
}

生成的代码就像处理程序没有订阅一样工作,这意味着在编译后的代码隐藏中-=位于+=之下。那么+=在编译器代码隐藏中的确切位置是ctorinitializeComponent调用之后的某个位置,还是完全在其他位置?

t0ybt7op

t0ybt7op1#

它并不像你想的那样工作,你不会找到“等价的c#",类似于你自己输入的内容。
AFAIK,xaml的处理方式与WPF相同:它被编译成一个数据“blob”,由Maui运行时处理。
C#中显示的所有内容都是“Map”,因此C#编译器可以将C#引用连接到XAML声明。
“InitializeComponent”在. g.cs中,但它没有显示xaml细节,只是显示了c#可见的元素的名称。
“InitializeComponent”是运行+=的等效项时;但你看不到。

hpxqektj

hpxqektj2#

这就是为什么您会在项目 obj 文件夹中找到 .g.cs 文件的原因。所有这些文件都是生成的代码文件。它们是在构建项目时由编译器创建的。这些文件的目的是为项目中的分部类或XAML生成的类提供生成的实现。
例如,在WPF、UWP或MAUI应用程序中创建基于XAML的用户界面时,XAML编译器将生成 .g.cs 文件,这些文件包含为与XAML标记中的元素对应的类生成的代码。此生成的代码包括属性、事件处理程序以及在运行时与用户界面元素交互所需的其他代码。由于元素类是部分定义的,InitializeComponent()然后用于在您自己的实现文件(构造函数)中设置所有内容。
通常,不应对 .g.cs 文件进行任何更改,因为下次生成项目时,任何更改都将被覆盖。相反,应更改相关的分部类或XAML标记文件,并让编译器生成更新的. g.cs文件。

相关问题