using System; using Avalonia.Controls; using Avalonia.Controls.Primitives; using Avalonia.Input; using Avalonia.Markup.Xaml; using Avalonia.ReactiveUI; using Microsoft.Extensions.Logging; using AuroraDesk.Presentation.ViewModels; using AuroraDesk.Presentation.Views.Dialogs; using ReactiveUI; using System.Reactive.Disposables; using System.Threading.Tasks; namespace AuroraDesk.Presentation.Views; /// /// 主窗口 /// public partial class MainWindow : ReactiveWindow, IActivatableView { private readonly ILogger? _logger; private bool _isClosingConfirmed = false; /// /// 无参构造函数,用于 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 已设置"); // 处理窗口关闭事件,显示确认框 this.Closing += OnWindowClosing; // 使用 WhenActivated 管理订阅 this.WhenActivated(disposables => { // 注册关闭确认对话框 Interaction Handler if (ViewModel != null) { ViewModel.CloseConfirmInteraction .RegisterHandler(async interaction => { var dialog = new CloseConfirmDialog(interaction.Input); var result = await dialog.ShowDialog(this); interaction.SetOutput(result); }) .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