using System.Threading.Tasks; using Avalonia.Controls; using Avalonia.Markup.Xaml; namespace MPN00BS { public partial class MessageBox : Window { public enum MessageBoxButtons { Ok, OkCancel, YesNo, YesNoCancel } public enum MessageBoxResult { Ok, Cancel, Yes, No } public MessageBox() { AvaloniaXamlLoader.Load(this); } public static Task Show(Window parent, string text, string title, MessageBoxButtons buttons) { var msgbox = new MessageBox() { Title = title }; msgbox.FindControl("Text").Text = text; var buttonPanel = msgbox.FindControl("Buttons"); var res = MessageBoxResult.Ok; void AddButton(string caption, MessageBoxResult r, bool def = false) { var btn = new Button { Content = caption }; btn.Click += (_, __) => { res = r; msgbox.Close(); }; buttonPanel.Children.Add(btn); if (def) res = r; } if (buttons == MessageBoxButtons.Ok || buttons == MessageBoxButtons.OkCancel) AddButton("Ok", MessageBoxResult.Ok, true); if (buttons == MessageBoxButtons.YesNo || buttons == MessageBoxButtons.YesNoCancel) { AddButton("Yes", MessageBoxResult.Yes); AddButton("No", MessageBoxResult.No, true); } if (buttons == MessageBoxButtons.OkCancel || buttons == MessageBoxButtons.YesNoCancel) AddButton("Cancel", MessageBoxResult.Cancel, true); var tcs = new TaskCompletionSource(); msgbox.Closed += delegate { tcs.TrySetResult(res); }; if (parent != null) msgbox.ShowDialog(parent); else msgbox.Show(); return tcs.Task; } } }