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 ReactiveUI;
using System.Reactive.Disposables;
namespace AuroraDesk.Presentation.Views;
///
/// 主窗口
///
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