using System; using Avalonia; using Avalonia.Controls; using Avalonia.Input; using Avalonia.Markup.Xaml; using DispenserUI.ViewModels.Components; using DispenserUI.Views.Controls; namespace DispenserUI.Views.Windows; public partial class CameraViewerWindow : Window { public CameraViewerVM ViewModel { get; } = new(); public CameraViewerWindow() { DataContext = ViewModel; InitializeComponent(); Body = this.FindControl("Body")!; Viewer = this.FindControl("Viewer")!; this.GetObservable(WindowStateProperty).Subscribe(state => { if (state == WindowState.Maximized) { ViewModel.IsFullScreen = true; // 全屏 Body.ColumnDefinitions[1].Width = new GridLength(0); } else if (state == WindowState.Normal) { // 恢复正常大小 Body.ColumnDefinitions[1].Width = new GridLength(400); ViewModel.IsFullScreen = false; SystemDecorations = SystemDecorations.Full; } }); ViewModel.InitViewer(Viewer); ViewModel.InitWindow(this); } private void InitializeComponent() { AvaloniaXamlLoader.Load(this); } protected override void OnClosing(WindowClosingEventArgs e) { base.OnClosing(e); // 退出的时候顺便停止采集视频 ViewModel.StopCaptureVideo(); ViewModel.DisableCameraListener(); ViewModel.StopRecordingVideo(); } protected override void OnResized(WindowResizedEventArgs e) { base.OnResized(e); ViewModel.OnWindowResize(); } private void OnNormalWindowClicked(object? sender, TappedEventArgs e) { WindowState = WindowState.Normal; Body.ColumnDefinitions[1].Width = new GridLength(400); ViewModel.IsFullScreen = false; } /// /// 电机缩小 /// private void OnNarrowClicked(object? sender, TappedEventArgs e) { Viewer.ImageShrink(); } /// /// 点击放大 /// private void OnEnlargeClicked(object? sender, TappedEventArgs e) { Viewer.ImageEnlarge(); } private void OnPixelChanged(object? sender, Point point) { ViewModel.PixelCoordinate = $"{point.X:0.###} * {point.Y:0.###}"; } private void OnScaleRatioChanged(object? sender, double ratio) { ViewModel.UpdateScaleRatio(ratio); } private void OnCenterPixelChanged(object? sender, Point e) { Console.WriteLine($"中心像素点: {e}"); ViewModel.CenterPixelPoint = e; } }