Просмотр исходного кода

avlaonia: made test control for image editor

Kenric Nugteren 1 неделя назад
Родитель
Сommit
8eda945ff2

+ 1 - 1
PRS.Avalonia/PRS.Avalonia/MainViewModel.cs

@@ -53,7 +53,7 @@ public partial class MainViewModel : ViewModelBase
         PropertyChanged += MainViewModel_PropertyChanged;
 
         // change to HomeView 
-        Navigation.Reset<LoginViewModel>();
+        Navigation.Reset<TestViewModel>();
     }
 
     public override bool OnBackButtonPressed()

+ 11 - 1
PRS.Avalonia/PRS.Avalonia/TestView.axaml

@@ -7,5 +7,15 @@
              mc:Ignorable="d" d:DesignWidth="800" d:DesignHeight="450"
              x:Class="PRS.Avalonia.TestView"
 			 x:DataType="prs:TestViewModel">
-	<components:ImageEditor Source="{SvgImage ../Images/cross.svg}"/>
+	<Grid>
+		<components:ImageEditor Name="Editor"
+								Source="{Binding Source}"
+								BorderBrush="Black"
+								BorderThickness="1"
+								CornerRadius="4"
+								IsVisible="{Binding IsEditing}"
+								ShowButtons="False"
+								Mode="Ellipse"/>
+		<Image Name="Image" Source="{Binding Source}" IsVisible="{Binding !IsEditing}"/>
+	</Grid>
 </UserControl>

+ 20 - 0
PRS.Avalonia/PRS.Avalonia/TestView.axaml.cs

@@ -1,6 +1,9 @@
 using Avalonia;
 using Avalonia.Controls;
 using Avalonia.Markup.Xaml;
+using Avalonia.Media.Imaging;
+using InABox.Avalonia.Components;
+using System;
 
 namespace PRS.Avalonia;
 
@@ -10,4 +13,21 @@ public partial class TestView : UserControl
     {
         InitializeComponent();
     }
+
+    protected override void OnDataContextChanged(EventArgs e)
+    {
+        base.OnDataContextChanged(e);
+
+        if(DataContext is TestViewModel model)
+        {
+            model.GetBitmap = GetBitmap;
+        }
+    }
+
+    private Bitmap? GetBitmap()
+    {
+        var image = Editor.GetImage();
+        Editor.Reset();
+        return image;
+    }
 }

+ 27 - 1
PRS.Avalonia/PRS.Avalonia/TestViewModel.cs

@@ -1,4 +1,7 @@
-using CommunityToolkit.Mvvm.Input;
+using Avalonia.Media;
+using Avalonia.Media.Imaging;
+using CommunityToolkit.Mvvm.ComponentModel;
+using CommunityToolkit.Mvvm.Input;
 using InABox.Avalonia;
 using PRS.Avalonia.Modules;
 using System;
@@ -13,4 +16,27 @@ public partial class TestViewModel : ModuleViewModel
 {
     public override string Title => "Test";
 
+    [ObservableProperty]
+    private IImage? _source = Images.cross;
+
+    [ObservableProperty]
+    private bool _isEditing = true;
+
+    [ObservableProperty]
+    private Func<Bitmap?>? _getBitmap;
+
+    public TestViewModel()
+    {
+        PrimaryMenu.Add(new(Images.tick, Toggle));
+    }
+
+    private Task<bool> Toggle()
+    {
+        if (IsEditing)
+        {
+            Source = GetBitmap?.Invoke();
+        }
+        IsEditing = !IsEditing;
+        return Task.FromResult(true);
+    }
 }