MessageBox - рд╡рд┐рднрд┐рдиреНрди GUI рдЪреМрдЦрдЯреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рдЦрд┐рдбрд╝рдХреА, рд▓реЗрдХрд┐рди рдЖрдк рдЗрд╕реЗ AvaloniaUI рдореЗрдВ рдирд╣реАрдВ рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВред
рдЪрд▓реЛ рдЗрд╕реЗ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддреЗ рд╣реИрдВред

рд╕рдорд╛рдзрд╛рди, рдЬрд┐рд╕реЗ рдореИрдВ рд╕реБрдзрд╛рд░ рдФрд░ рд╕рдорд░реНрдерди рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ, рдЖрдк
рдирдЧреЗрдЯ рдФрд░
рдЧрд┐рдЯрд▓реИрдм рдкрд░ рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣ рдЦрд╝реБрд╢реА рдХреА рдмрд╛рдд рд╣реЛрдЧреА, рдпрджрд┐ рдХреЛрдИ рд╡реНрдпрдХреНрддрд┐ рдЕрдкрдиреЗ рдкреБрд▓ рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЗ рд╕рд╛рде рдирдП рд╡рд┐рдЪрд╛рд░ рд▓рд╛рддрд╛ рд╣реИред
рдореИрдВ рдЕрдкрдиреЗ рдХрд╛рдо рдХреЛ рдЖрд╕рд╛рди рдФрд░ рдЙрдкрдпреЛрдЧреА рдмрдирд╛рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХреНрдпреЛрдВрдХрд┐ WPF рдХрд╛ рдореИрд╕реЗрдЬрдмреЙрдХреНрд╕ рд╣реИред
рдЪрд▓рд┐рдП рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ
рдЗрд╕ рд╡рд┐рдзрд┐ рдХреЛ рдмреБрд▓рд╛рдУ:
MessageBox.ShowForResult("test","Wanna test smth?",MessageBox.MessageBoxButtons.OkCancel);
рдФрд░ рд╣реЗрдбрд░, рд╕рд╛рдордЧреНрд░реА (рдкрд╛рда) рдФрд░ рджреЛ рдмрдЯрди рдХреЗ рд╕рд╛рде рд╡рд┐рдВрдбреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВред (рд╡рд┐рдВрдбреЛрдЬ 10, рдЙрдмрдВрдЯреВ 18.04)


рдХрдХреНрд╖рд╛ рд╕рдВрджреЗрд╢ рдмреЙрдХреНрд╕ рдореЗрдВ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ 4 рд╡рд┐рдзрд┐рдпрд╛рдБ рд╣реИрдВ:
ShowForResult - рдмрдЯрди рдХреЗ рдХреНрд▓рд┐рдХ рдХрд╛ рд╡рд╛рдкрд╕реА рдкрд░рд┐рдгрд╛рдоред
ShowDialog - рдмрдЯрди рдХреЗ рдХреНрд▓рд┐рдХ рдХрд╛ рдкрд░рд┐рдгрд╛рдо рд▓реМрдЯрд╛рдПрдВ рдФрд░ рдЪреБрдиреЗ рд╣реБрдП рдорд╛рддрд╛-рдкрд┐рддрд╛ рдХреЗ рд▓рд┐рдП рдЗрд╕ рд╡рд┐рдВрдбреЛ рдХреЛ рд╕рдВрд╡рд╛рдж рд╡рд┐рдВрдбреЛ рдХреЗ рд░реВрдк рдореЗрдВ рд╕реЗрдЯ рдХрд░реЗрдВред
рд╢реЛ - рдПрдХ "рдУрдХреЗ" рдмрдЯрди рдХреЗ рд╕рд╛рде рд╡рд┐рдВрдбреЛ рджрд┐рдЦрд╛рдПрдВ, рдЬреЛ рдХреНрд▓рд┐рдХ рдХреЗ рдкрд░рд┐рдгрд╛рдо рдХреЛ рдЕрдирджреЗрдЦрд╛ рдХрд░рддрд╛ рд╣реИ (рд╡рд╛рдкрд╕реА рд╢реВрдиреНрдп)ред
ShowNative - рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рдХреЗ рд▓рд┐рдП рдореВрд▓ рд╡рд┐рдВрдбреЛ рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВ, рдпрджрд┐ рд╡рд┐рдлрд▓ рд░рд╣рд╛ рд╣реИ, рддреЛ ShowForResult рдХреЛ рдХреЙрд▓ рдХрд░реЗрдВред
рдПрдкреАрдЖрдИрдпрд╣ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ:
рдкреНрд░рддреНрдпреЗрдХ рд╡рд┐рдзрд┐ рдореЗрдВ рд╡рд┐рдВрдбреЛ рдмрдирд╛рдПрдБ,
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);
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)
рдФрд░ рдкрдврд╝реЗрдВ 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;
рдирддреАрдЬрддрди, рд╣рдореЗрдВ рдмрдЯрди рдХреЗ рд╕рд╛рде рд╕рд░рд▓ рдЦрд┐рдбрд╝рдХрд┐рдпрд╛рдВ рдорд┐рд▓рддреА рд╣реИрдВ, рдЬреЛ рд╣рдореЗрдВ рдХреНрд░реЙрд╕-рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рдореИрд╕реЗрдЬрдмреЙрдХреНрд╕ рдмрдирд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдЧрд╛ред
рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛
рд╡рд░реНрд▓реНрдбрдмрд┐рдЯрд░ рдХреЗ рд▓рд┐рдП рдЖрднрд╛рд░реАред