Dispenser/DispenserUI/Views/Windows/CameraViewerWindow.axaml.cs

104 lines
2.7 KiB
C#

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<Grid>("Body")!;
Viewer = this.FindControl<ImageViewer>("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;
}
/// <summary>
/// 电机缩小
/// </summary>
private void OnNarrowClicked(object? sender, TappedEventArgs e)
{
Viewer.ImageShrink();
}
/// <summary>
/// 点击放大
/// </summary>
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;
}
}