Avalonia. Назначить изображение для Image через нажатие кнопки
Всем привет. Для одного моего задания в рамках обучения в вузе решил изсользовать Avalonia, но столкнулся с проблемой. Не особо понимаю механизм вывода изображения. Мне нужно сделать это через код после нажатия кнопки. Код кнопки:
private void OnButtonClick_gen_cgd(object sender, RoutedEventArgs e)
{
var rand = new Random();
a2 = new Point();
a2.SetX((float)rand.Next(0, 1000));
a2.SetY((float)rand.Next(0, 700));
b2 = new Point();
b2.SetX((float)rand.Next(0, 1000));
b2.SetY((float)rand.Next(0, 700));
c2 = new Point();
c2.SetX((float)rand.Next(0, 1000));
c2.SetY((float)rand.Next(0, 700));
d2 = new Point();
d2.SetX((float)rand.Next(0, 1000));
d2.SetY((float)rand.Next(0, 700));
bezier2 = new Bezier(a2, b2, c2, d2);
bezier2.SetDrawer(new CGDrawer());
bezier2.Draw();
Cgd = new Bitmap("CGD.png");
}
xaml:
<Image VerticalAlignment="Center" HorizontalAlignment="Center" Width="700" Height="1000" Source="{Binding Cgd}"></Image>
Перечитал множество источников, но ничего не помогло. Можно резонно заметить, что "плохо читал". Возможно.
На сколько я понял моя переменная Cgd дожна интерпитироваться, как источник для изображения, потому что назначен в Source="{Binding Cgd}" и как я увидел в одном из примеров такая переменная должна быть объявлена непосредственно в коде. Так ли это?
Прошу помощи у тех кто в этом разбирается.
P.S. Вот полный мой код:
using Avalonia.Controls;
using Avalonia;
using Avalonia.Interactivity;
using System.IO;
using Aspose.Drawing;
using System;
namespace lab_2_DP;
public partial class MainWindow : Window
{
private IPoint a1, b1, c1, d1, a2, b2, c2, d2;
private Bezier bezier1, bezier2;
private Bitmap Cgd;
private Bitmap Cbd;
public MainWindow()
{
InitializeComponent();
}
private void OnButtonClick_gen_cbd(object sender, RoutedEventArgs e)
{
var rand = new Random();
a1 = new Point();
a1.SetX((float)rand.Next(0, 1000));
a1.SetY((float)rand.Next(0, 700));
b1 = new Point();
b1.SetX((float)rand.Next(0, 1000));
b1.SetY((float)rand.Next(0, 700));
c1 = new Point();
c1.SetX((float)rand.Next(0, 1000));
c1.SetY((float)rand.Next(0, 700));
d1 = new Point();
d1.SetX((float)rand.Next(0, 1000));
d1.SetY((float)rand.Next(0, 700));
bezier1 = new Bezier(a1, b1, c1, d1);
bezier1.SetDrawer(new CBDrawer());
bezier1.Draw();
var fileStream = File.OpenRead("CBD.png");
Cbd = new Bitmap(fileStream);
}
private void OnButtonClick_save_cbd(object sender, RoutedEventArgs e)
{
if (File.Exists(@"CBD.png"))
bezier1.SaveSVG();
}
private void OnButtonClick_gen_cgd(object sender, RoutedEventArgs e)
{
var rand = new Random();
a2 = new Point();
a2.SetX((float)rand.Next(0, 1000));
a2.SetY((float)rand.Next(0, 700));
b2 = new Point();
b2.SetX((float)rand.Next(0, 1000));
b2.SetY((float)rand.Next(0, 700));
c2 = new Point();
c2.SetX((float)rand.Next(0, 1000));
c2.SetY((float)rand.Next(0, 700));
d2 = new Point();
d2.SetX((float)rand.Next(0, 1000));
d2.SetY((float)rand.Next(0, 700));
bezier2 = new Bezier(a2, b2, c2, d2);
bezier2.SetDrawer(new CGDrawer());
bezier2.Draw();
Cgd = new Bitmap(@"CGD.png");
}
private void OnButtonClick_save_cgd(object sender, RoutedEventArgs e)
{
if (File.Exists(@"CGD.png"))
bezier2.SaveSVG();
}
}
Источник: Stack Overflow на русском