Avalonia如何使用行为(Behaviors) Avalonia Behaviors用法

Avalonia中使用Behaviors需安装Avalonia.Xaml.Behaviors库并引入对应命名空间,通过EventTriggerBehavior等绑定UI事件与ViewModel命令,支持Click、Loaded等事件,还可自定义Behavior实现扩展逻辑。

在Avalonia中使用Behaviors,核心是借助 Avalonia.Xaml.Behaviors 库,把UI事件(如点击、加载、焦点变化)与ViewModel中的命令解耦绑定,避免后台代码写逻辑,真正践行MVVM。

安装和引入命名空间

先通过NuGet安装最新稳定版:

  • Install-Package Avalonia.Xaml.Behaviors -Version 11.1.0.4

然后在XAML顶部声明两个关键命名空间:

xmlns:interactivity="clr-namespace:Avalonia.Xaml.Interactivity;assembly=Avalonia.Xaml.Interactivity"
xmlns:behaviors="clr-namespace:Avalonia.Xaml.Behaviors;assembly=Avalonia.Xaml.Behaviors"

常用事件触发绑定

比如按钮点击执行命令:

支持的常见事件名包括:ClickLoadedUnloadedPointerPressedPointerReleasedLostFocus等。

多个事件可并列写在同一控件内,例如同时监听按下和松开:

  • → DownCommand
  • → UpCommand

页面或控件加载时自动执行

适合初始化数据、设置状态等场景:


  
    
      
    
  

注意:LoadedTrigger 是专用行为,比用 EventTriggerBehavior EventName="Loaded" 更语义清晰,也更可靠(尤其对动态内容)。

自定义行为(进阶但实用)

当内置行为不够用时,可继承 Behavior 写轻量逻辑。例如让 TextBox 在 IsVisible=true 时自动聚焦并全选:

public class FocusOnVisibleBehavior : Behavior
{
    protected override void OnAttached()
    {
        base.OnAttached();
        AssociatedObject?.PropertyChanged += OnPropertyChanged;
    }
private void OnPropertyChanged(object sender, AvaloniaPropertyChangedEventArgs e)
{
    if (e.Property == Visual.IsVisibleProperty && AssociatedObject?.IsVisible == true)
    {
        AssociatedObject.Focus();
        AssociatedObject.SelectAll();
    }
}

protected override void OnDetaching() => 
    AssociatedObject?.PropertyChanged -= OnPropertyChanged;

}

XAML中直接引用:

不复杂但容易忽略:行为只在控件生命周期内有效,确保 ViewModel 中的命令是 ICommand 类型(推荐用 [RelayCommand]),且未被GC提前回收。