AvaloniaUI рдХреЗ рд▓рд┐рдП рдореИрд╕реЗрдЬрдмреЙрдХреНрд╕

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; 

рдирддреАрдЬрддрди, рд╣рдореЗрдВ рдмрдЯрди рдХреЗ рд╕рд╛рде рд╕рд░рд▓ рдЦрд┐рдбрд╝рдХрд┐рдпрд╛рдВ рдорд┐рд▓рддреА рд╣реИрдВ, рдЬреЛ рд╣рдореЗрдВ рдХреНрд░реЙрд╕-рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рдореИрд╕реЗрдЬрдмреЙрдХреНрд╕ рдмрдирд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдЧрд╛ред

рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╡рд░реНрд▓реНрдбрдмрд┐рдЯрд░ рдХреЗ рд▓рд┐рдП рдЖрднрд╛рд░реАред

Source: https://habr.com/ru/post/hi454386/


All Articles