diff --git a/AvaloniaTest/App.axaml b/AvaloniaTest/App.axaml index a4961c8..6328114 100644 --- a/AvaloniaTest/App.axaml +++ b/AvaloniaTest/App.axaml @@ -1,10 +1,14 @@ - + + + \ No newline at end of file diff --git a/AvaloniaTest/AvaloniaTest.csproj b/AvaloniaTest/AvaloniaTest.csproj index f59f38f..364f45a 100644 --- a/AvaloniaTest/AvaloniaTest.csproj +++ b/AvaloniaTest/AvaloniaTest.csproj @@ -15,5 +15,12 @@ None All + + + all + runtime; build; native; contentfiles; analyzers; buildtransitive + + + diff --git a/AvaloniaTest/MainView.axaml b/AvaloniaTest/MainView.axaml new file mode 100644 index 0000000..10e5ad9 --- /dev/null +++ b/AvaloniaTest/MainView.axaml @@ -0,0 +1,16 @@ + + + + + + + + diff --git a/AvaloniaTest/MainView.axaml.cs b/AvaloniaTest/MainView.axaml.cs new file mode 100644 index 0000000..dc451f7 --- /dev/null +++ b/AvaloniaTest/MainView.axaml.cs @@ -0,0 +1,89 @@ +using Avalonia; +using Avalonia.Controls; +using Avalonia.Controls.Notifications; +using Avalonia.Markup.Xaml; +using Avalonia.Media.Imaging; +using Avalonia.Platform.Storage; +using System; +using System.IO; +using System.Threading.Tasks; + +namespace AvaloniaTest +{ + public partial class MainView : NavigationPage + { + public static MainView Current { get; private set; } = null!; + + private WindowNotificationManager notificationManager = null!; + + public MainView() + { + InitializeComponent(); + Current = this; + } + + protected override void OnAttachedToVisualTree(VisualTreeAttachmentEventArgs e) + { + base.OnAttachedToVisualTree(e); + notificationManager = new WindowNotificationManager(TopLevel.GetTopLevel(this)); + } + + /// + /// Показывает уведомление с заданным заголовком, сообщением и типом уведомления. + /// + /// Заголовок + /// Содержимое + /// Тип уведомления + public void ShowNotification(string title, string message, NotificationType type) + { + notificationManager.Show(new Notification + { + Message = message, + Expiration = TimeSpan.FromSeconds(3), + Type = type, + Title = title + }); + } + + /// + /// Обработчик события нажатия кнопки для выбора изображения и его отображения в Image1. + /// + /// Отправитель + /// Аргументы + private async void Button_Click(object? sender, Avalonia.Interactivity.RoutedEventArgs e) + { + try + { + var top = TopLevel.GetTopLevel(this); + var result = await top!.StorageProvider.OpenFilePickerAsync(new FilePickerOpenOptions + { + AllowMultiple = false, + FileTypeFilter = [FilePickerFileTypes.ImageAll], + Title = "Выберите изображение" + }); + + if (result.Count == 0) + return; + + var imagePath = result[0].Path.LocalPath; + + string newImageName = $"{Guid.NewGuid()}{Path.GetExtension(imagePath)}"; + + string newImagePath = Path.Combine("Images", newImageName); + + Directory.CreateDirectory("Images"); + + File.Copy(imagePath, newImagePath); + + Image1.Source = new Bitmap(newImagePath); + + MainView.Current.ShowNotification("Успех", "Изображение успешно загружено и сохранено.", NotificationType.Success); + } + catch (Exception ex) + { + MainView.Current.ShowNotification("Ошибка", $"Не удалось загрузить изображение: {ex.Message}", NotificationType.Error); + } + + } + } +} \ No newline at end of file diff --git a/AvaloniaTest/MainWindow.axaml b/AvaloniaTest/MainWindow.axaml index 877fdc9..17c5ea9 100644 --- a/AvaloniaTest/MainWindow.axaml +++ b/AvaloniaTest/MainWindow.axaml @@ -1,9 +1,11 @@ - Welcome to Avalonia! + diff --git a/AvaloniaTest/MainWindow.axaml.cs b/AvaloniaTest/MainWindow.axaml.cs index 62b2dca..0fd4a3b 100644 --- a/AvaloniaTest/MainWindow.axaml.cs +++ b/AvaloniaTest/MainWindow.axaml.cs @@ -8,4 +8,9 @@ public partial class MainWindow : Window { InitializeComponent(); } + + private void Button_Click(object? sender, Avalonia.Interactivity.RoutedEventArgs e) + { + + } } \ No newline at end of file