跳到主要内容
版本:11.0.0

Code-behind

除了XAML文件外,大多数Avalonia控件还具有常常用C#编写的 code-behind 文件。代码后台文件通常具有.axaml.cs文件扩展名,并且通常在IDE中显示在XAML文件的下一级。

例如,在Visual Studio的解决方案资源管理器中,您可以看到一个MainWindow.axaml文件以及它的code-behind文件MainWindow.axaml.cs

code-behind文件包含一个与XAML文件同名的类。例如:

MainWindow.axaml.cs
using Avalonia.Controls;

namespace AvaloniaApplication1.Views
{
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}
}
}

请注意,类名与XAML文件的名称匹配,并且在Window元素的x:Class属性中也有引用。

MainWindow.axaml
<Window xmlns="https://github.com/avaloniaui"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
x:Class="AvaloniaApplication1.Views.MainWindow">
...
</Window>
提示

如果在代码中对类名或其命名空间进行了任何更改,请确保x:Class属性始终匹配,否则会出现错误。

当首次添加code-behind文件时,它只有一个构造函数,该构造函数调用InitializeComponent()方法。调用此方法在运行时加载XAML是必需的。

定位控件

在使用code-behind时,您通常需要访问在XAML中定义的控件。

为此,您需要通过在XAML中使用Name(或x:Name)属性为所需的控件指定名称。

下面是一个具有命名按钮的XAML文件示例:

MainWindow.axaml
<Window xmlns="https://github.com/avaloniaui"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
x:Class="AvaloniaApplication5.MainWindow">
<Button Name="greetingButton">Hello World</Button>
</Window>

现在,您可以通过code-behind中自动生成的greetingButton字段访问该按钮:

MainWindow.axaml.cs
using Avalonia.Controls;

namespace AvaloniaApplication1.Views
{
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
greetingButton.Content = "Goodbye Cruel World!";
}
}
}

设置属性

通过在code-behind中提供控件引用,您可以设置属性。例如,您可以像这样更改背景属性:

greetingButton.Background = Brushes.Blue;

处理事件

任何有用的应用程序都需要您执行一些操作!当使用代码后台模式时,您需要在code-behind文件中编写事件处理程序。

事件处理程序编写为code-behind文件中的方法,然后使用事件属性在XAML中引用它们。例如,要为按钮点击事件添加处理程序:

MainWindow.axaml
<Window xmlns="https://github.com/avaloniaui"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
x:Class="AvaloniaApplication4.MainWindow">
<Button Click="GreetingButtonClickHandler">Hello World</Button>
</Window>
MainWindow.axaml.cs
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}

public void GreetingButtonClickHandler(object sender, RoutedEventArgs e)
{
// code here.
}
}

请注意,许多Avalonia事件处理程序传递了一个名为RoutedEventArgs的特殊参数。它包含有关事件的生成和传播方式的信息。

信息

有关事件路由概念的更多信息,请参见这里.