using System; using Avalonia.Controls; using Avalonia.Controls.Primitives; using Avalonia.Input; using Avalonia.Markup.Xaml; using Avalonia.ReactiveUI; using Microsoft.Extensions.Logging; using MyAvaloniaApp.ViewModels; using ReactiveUI; using System.Reactive.Disposables; namespace MyAvaloniaApp; public partial class MainWindow : ReactiveWindow, IActivatableView { private readonly ILogger? _logger; /// /// 无参构造函数,用于 XAML 设计器 /// public MainWindow() { InitializeComponent(); SetupWindowControls(); } /// /// 构造函数,接受依赖注入的 ViewModel /// /// 主窗口的 ViewModel /// 日志记录器 public MainWindow(MainWindowViewModel viewModel, ILogger? logger = null) { ArgumentNullException.ThrowIfNull(viewModel); _logger = logger; InitializeComponent(); ViewModel = viewModel; SetupWindowControls(); _logger?.LogInformation("MainWindow 已创建,ViewModel 已设置"); // 使用 WhenActivated 管理订阅 this.WhenActivated(disposables => { // 可以在这里添加窗口级别的订阅,如果需要的话 // 例如:this.WhenAnyValue(x => x.ViewModel.Title) // .Subscribe(title => ...) // .DisposeWith(disposables); }); } private void InitializeComponent() { AvaloniaXamlLoader.Load(this); } /// /// 设置窗口控制按钮事件 /// private void SetupWindowControls() { // 设置标题栏拖动功能 var titleBarGrid = this.FindControl("TitleBarGrid"); if (titleBarGrid != null) { titleBarGrid.PointerPressed += OnTitleBarPointerPressed; } // 最小化按钮 var minimizeButton = this.FindControl