Let's start

MessageBox.ShowForResult("test","Wanna test smth?",MessageBox.MessageBoxButtons.OkCancel);

How it works:

var messageBox = new MessageBox();

messageBox.Content = CreateBaseMsgBox(text, buttons, messageBox);

var textBlock = new TextBlock(); textBlock.Text = text; textBlock.TextAlignment = TextAlignment.Center; textBlock.TextWrapping = TextWrapping.Wrap; Grid.SetRow(textBlock,0); grid.Children.Add(textBlock);

var btnGrid = GetButtonGrid(GetButton(window, MessageBoxResult.Yes), GetButton(window,MessageBoxResult.No)); Grid.SetRow(btnGrid,1); grid.Children.Add(btnGrid);

Full listing for GetButtonGrid. private static Grid GetButtonGrid(params Button[] buttons) { var grid = new Grid(); List<ColumnDefinition> definitions = new List<ColumnDefinition>(); for (int i = 0; i < buttons.Length; i++) { definitions.Add(new ColumnDefinition{Width = new GridLength(5)}); definitions.Add(new ColumnDefinition{Width = new GridLength(1,GridUnitType.Star)}); } definitions.Add(new ColumnDefinition{Width = new GridLength(5)}); grid.ColumnDefinitions.AddRange(definitions); var j = 1; foreach (var btn in buttons) { Grid.SetColumn(btn,j); j += 2; grid.Children.Add(btn); } return grid; }





GetButton(MessageBox window,MessageBoxResult result)

Read more private static Button GetButton(MessageBox window,MessageBoxResult result) { var btn = new Button(); btn.Content = result.ToString(); btn.Click += (_, __) => { window.Res = result; window.Close(); }; return btn; }



var tcs = new TaskCompletionSource<MessageBoxResult>(); messageBox.Closed += delegate { tcs.TrySetResult(messageBox.Res); }; ... return tcs.Task;

MessageBox — useful window for different GUI frameworks, but you can't find it in AvaloniaUI.Let's try to do it.Solution, which I wanna improve and support, you can find on nuget and on gitlab . It'll be glad, if somebody bring new ideas with his/her pull requests.I wanna create my lib as easy and useful as WPF's messagebox is.Call this method:and get window with header, content(text) and two buttons. (Windows 10, Ubuntu 18.04)Class MessageBox contains public 4 methods:ShowForResult — return result of button's click.ShowDialog — return result of button's click and set this window as dialog window for chosen parent.Show — show window with one «ok» button, which ignore result of click (return void).ShowNative — try to call native window for platform, if failed, call ShowForResult.In every method create window,and set content for each.Content is a grid, which include rows, one for textbox:other for grid with buttons:The functionality of the buttons is given by the method:The method accepts a window which be manipulated by buttons, and result returned by them.And, the last thing to consider is a code fragment that provides the result of a button click:As a result, we get simple windows with buttons, which will allow us to create cross-platform MessageBox.Grateful for user worldbeater