feat: add default buttons.
This commit is contained in:
@@ -5,7 +5,7 @@ namespace Ursa.Controls;
|
||||
|
||||
public static class MessageBox
|
||||
{
|
||||
public static async Task ShowAsync(string message)
|
||||
public static async Task<MessageBoxResult> ShowAsync(string message)
|
||||
{
|
||||
var messageWindow = new MessageBoxWindow()
|
||||
{
|
||||
@@ -18,11 +18,17 @@ public static class MessageBox
|
||||
if (main is null)
|
||||
{
|
||||
messageWindow.Show();
|
||||
return MessageBoxResult.None;
|
||||
}
|
||||
else
|
||||
{
|
||||
await messageWindow.ShowDialog(main);
|
||||
var result = await messageWindow.ShowDialog<MessageBoxResult>(main);
|
||||
return result;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
return MessageBoxResult.None;
|
||||
}
|
||||
}
|
||||
}
|
||||
9
src/Ursa/Controls/MessageBox/MessageBoxButton.cs
Normal file
9
src/Ursa/Controls/MessageBox/MessageBoxButton.cs
Normal file
@@ -0,0 +1,9 @@
|
||||
namespace Ursa.Controls;
|
||||
|
||||
public enum MessageBoxButton
|
||||
{
|
||||
OK,
|
||||
OKCancel,
|
||||
YesNo,
|
||||
YesNoCancel,
|
||||
}
|
||||
10
src/Ursa/Controls/MessageBox/MessageBoxResult.cs
Normal file
10
src/Ursa/Controls/MessageBox/MessageBoxResult.cs
Normal file
@@ -0,0 +1,10 @@
|
||||
namespace Ursa.Controls;
|
||||
|
||||
public enum MessageBoxResult
|
||||
{
|
||||
Cancel,
|
||||
No,
|
||||
None,
|
||||
OK,
|
||||
Yes,
|
||||
}
|
||||
@@ -1,14 +1,131 @@
|
||||
using Avalonia.Controls;
|
||||
using Avalonia.Controls.Metadata;
|
||||
using Avalonia.Controls.Primitives;
|
||||
using Avalonia.Input;
|
||||
using Avalonia.Interactivity;
|
||||
using Avalonia.Platform;
|
||||
|
||||
namespace Ursa.Controls;
|
||||
|
||||
[TemplatePart(PART_CloseButton, typeof(Button))]
|
||||
[TemplatePart(PART_NoButton, typeof(Button))]
|
||||
[TemplatePart(PART_OKButton, typeof(Button))]
|
||||
[TemplatePart(PART_CancelButton, typeof(Button))]
|
||||
[TemplatePart(PART_YesButton, typeof(Button))]
|
||||
public class MessageBoxWindow: Window
|
||||
{
|
||||
public const string PART_CloseButton = "PART_CloseButton";
|
||||
public const string PART_YesButton = "PART_YesButton";
|
||||
public const string PART_NoButton = "PART_NoButton";
|
||||
public const string PART_OKButton = "PART_OKButton";
|
||||
public const string PART_CancelButton = "PART_CancelButton";
|
||||
|
||||
private MessageBoxButton _buttonConfigs;
|
||||
|
||||
private Button? _closeButton;
|
||||
private Button? _yesButton;
|
||||
private Button? _noButton;
|
||||
private Button? _okButton;
|
||||
private Button? _cancelButton;
|
||||
|
||||
protected override Type StyleKeyOverride => typeof(MessageBoxWindow);
|
||||
|
||||
static MessageBoxWindow()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
public MessageBoxWindow()
|
||||
{
|
||||
_buttonConfigs = MessageBoxButton.OK;
|
||||
}
|
||||
|
||||
public MessageBoxWindow(MessageBoxButton buttons)
|
||||
{
|
||||
_buttonConfigs = buttons;
|
||||
}
|
||||
|
||||
protected override void OnApplyTemplate(TemplateAppliedEventArgs e)
|
||||
{
|
||||
base.OnApplyTemplate(e);
|
||||
if (_closeButton != null)
|
||||
{
|
||||
_closeButton.Click -= OnCloseButtonClick;
|
||||
}
|
||||
if (_yesButton != null)
|
||||
{
|
||||
_yesButton.Click -= OnYesButtonClick;
|
||||
}
|
||||
if (_noButton != null)
|
||||
{
|
||||
_noButton.Click -= OnNoButtonClick;
|
||||
}
|
||||
if (_okButton != null)
|
||||
{
|
||||
_okButton.Click -= OnOKButtonClick;
|
||||
}
|
||||
if (_cancelButton != null)
|
||||
{
|
||||
_cancelButton.Click -= OnCancelButtonClick;
|
||||
}
|
||||
_yesButton = e.NameScope.Find<Button>(PART_YesButton);
|
||||
_noButton = e.NameScope.Find<Button>(PART_NoButton);
|
||||
_okButton = e.NameScope.Find<Button>(PART_OKButton);
|
||||
_cancelButton = e.NameScope.Find<Button>(PART_CancelButton);
|
||||
_closeButton = e.NameScope.Find<Button>(PART_CloseButton);
|
||||
if (_closeButton is not null)
|
||||
{
|
||||
_closeButton.Click += OnCloseButtonClick;
|
||||
}
|
||||
if (_yesButton is not null)
|
||||
{
|
||||
_yesButton.Click += OnYesButtonClick;
|
||||
}
|
||||
if (_noButton is not null)
|
||||
{
|
||||
_noButton.Click += OnNoButtonClick;
|
||||
}
|
||||
if (_okButton is not null)
|
||||
{
|
||||
_okButton.Click += OnOKButtonClick;
|
||||
}
|
||||
if (_cancelButton is not null)
|
||||
{
|
||||
_cancelButton.Click += OnCancelButtonClick;
|
||||
}
|
||||
}
|
||||
|
||||
private void OnCloseButtonClick(object sender, RoutedEventArgs e)
|
||||
{
|
||||
this.Close(MessageBoxResult.None);
|
||||
}
|
||||
|
||||
private void OnYesButtonClick(object sender, RoutedEventArgs e)
|
||||
{
|
||||
this.Close(MessageBoxResult.Yes);
|
||||
}
|
||||
|
||||
private void OnNoButtonClick(object sender, RoutedEventArgs e)
|
||||
{
|
||||
this.Close(MessageBoxResult.No);
|
||||
}
|
||||
|
||||
private void OnOKButtonClick(object sender, RoutedEventArgs e)
|
||||
{
|
||||
this.Close(MessageBoxResult.OK);
|
||||
}
|
||||
|
||||
private void OnCancelButtonClick(object sender, RoutedEventArgs e)
|
||||
{
|
||||
this.Close(MessageBoxResult.Cancel);
|
||||
}
|
||||
|
||||
protected override void OnKeyUp(KeyEventArgs e)
|
||||
{
|
||||
base.OnKeyUp(e);
|
||||
if (e.Key == Key.Escape)
|
||||
{
|
||||
this.Close(MessageBoxResult.None);
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user