diff --git a/src/Ursa/Controls/MessageBox/MessageBoxControl.cs b/src/Ursa/Controls/MessageBox/MessageBoxControl.cs
index fe47e53..208ee49 100644
--- a/src/Ursa/Controls/MessageBox/MessageBoxControl.cs
+++ b/src/Ursa/Controls/MessageBox/MessageBoxControl.cs
@@ -8,57 +8,60 @@ using Irihi.Avalonia.Shared.Helpers;
namespace Ursa.Controls;
///
-/// The messageBox used to display in OverlayDialogHost.
+/// The messageBox used to display in OverlayDialogHost.
///
[TemplatePart(PART_NoButton, typeof(Button))]
[TemplatePart(PART_OKButton, typeof(Button))]
[TemplatePart(PART_CancelButton, typeof(Button))]
[TemplatePart(PART_YesButton, typeof(Button))]
-public class MessageBoxControl: DialogControlBase
+public class MessageBoxControl : DialogControlBase
{
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 Button? _yesButton;
- private Button? _noButton;
- private Button? _okButton;
- private Button? _cancelButton;
-
+
public static readonly StyledProperty MessageIconProperty =
AvaloniaProperty.Register(
nameof(MessageIcon));
+ public static readonly StyledProperty ButtonsProperty =
+ AvaloniaProperty.Register(
+ nameof(Buttons));
+
+ public static readonly StyledProperty TitleProperty =
+ AvaloniaProperty.Register(
+ nameof(Title));
+
+ private Button? _cancelButton;
+ private Button? _noButton;
+ private Button? _okButton;
+
+ private Button? _yesButton;
+
+ static MessageBoxControl()
+ {
+ ButtonsProperty.Changed.AddClassHandler((o, _) => { o.SetButtonVisibility(); });
+ }
+
public MessageBoxIcon MessageIcon
{
get => GetValue(MessageIconProperty);
set => SetValue(MessageIconProperty, value);
}
- public static readonly StyledProperty ButtonsProperty = AvaloniaProperty.Register(
- nameof(Buttons));
-
public MessageBoxButton Buttons
{
get => GetValue(ButtonsProperty);
set => SetValue(ButtonsProperty, value);
}
- public static readonly StyledProperty TitleProperty = AvaloniaProperty.Register(
- nameof(Title));
-
public string? Title
{
get => GetValue(TitleProperty);
set => SetValue(TitleProperty, value);
}
-
- static MessageBoxControl()
- {
- ButtonsProperty.Changed.AddClassHandler((o, _) => { o.SetButtonVisibility(); });
- }
-
+
protected override void OnApplyTemplate(TemplateAppliedEventArgs e)
{
base.OnApplyTemplate(e);
@@ -71,55 +74,66 @@ public class MessageBoxControl: DialogControlBase
SetButtonVisibility();
}
+ protected override void OnLoaded(RoutedEventArgs e)
+ {
+ base.OnLoaded(e);
+ var defaultButton = Buttons switch
+ {
+ MessageBoxButton.OK => _okButton,
+ MessageBoxButton.OKCancel => _cancelButton,
+ MessageBoxButton.YesNo => _yesButton,
+ MessageBoxButton.YesNoCancel => _cancelButton,
+ _ => null
+ };
+ defaultButton?.Focus();
+ }
+
private void DefaultButtonsClose(object? sender, RoutedEventArgs e)
{
- if (sender is Button button)
+ if (sender is not Button button) return;
+ var result = button switch
{
- if (button == _okButton)
- {
- OnElementClosing(this, MessageBoxResult.OK);
- }
- else if (button == _cancelButton)
- {
- OnElementClosing(this, MessageBoxResult.Cancel);
- }
- else if (button == _yesButton)
- {
- OnElementClosing(this, MessageBoxResult.Yes);
- }
- else if (button == _noButton)
- {
- OnElementClosing(this, MessageBoxResult.No);
- }
- }
+ _ when button == _okButton => MessageBoxResult.OK,
+ _ when button == _cancelButton => MessageBoxResult.Cancel,
+ _ when button == _yesButton => MessageBoxResult.Yes,
+ _ when button == _noButton => MessageBoxResult.No,
+ _ => MessageBoxResult.None
+ };
+ OnElementClosing(this, result);
}
-
+
private void SetButtonVisibility()
{
+ var closeButtonVisible = Buttons != MessageBoxButton.YesNo;
+ IsVisibleProperty.SetValue(closeButtonVisible, _closeButton);
switch (Buttons)
{
case MessageBoxButton.OK:
- Button.IsVisibleProperty.SetValue(true, _okButton);
- Button.IsVisibleProperty.SetValue(false, _cancelButton, _yesButton, _noButton);
+ IsVisibleProperty.SetValue(true, _okButton);
+ IsVisibleProperty.SetValue(false, _cancelButton, _yesButton, _noButton);
+ Button.IsDefaultProperty.SetValue(true, _okButton);
+ Button.IsDefaultProperty.SetValue(false, _cancelButton, _yesButton, _noButton);
break;
case MessageBoxButton.OKCancel:
- Button.IsVisibleProperty.SetValue(true, _okButton, _cancelButton);
- Button.IsVisibleProperty.SetValue(false, _yesButton, _noButton);
+ IsVisibleProperty.SetValue(true, _okButton, _cancelButton);
+ IsVisibleProperty.SetValue(false, _yesButton, _noButton);
+ Button.IsDefaultProperty.SetValue(true, _okButton);
+ Button.IsDefaultProperty.SetValue(false, _cancelButton, _yesButton, _noButton);
break;
case MessageBoxButton.YesNo:
- Button.IsVisibleProperty.SetValue(false, _okButton, _cancelButton);
- Button.IsVisibleProperty.SetValue(true, _yesButton, _noButton);
+ IsVisibleProperty.SetValue(false, _okButton, _cancelButton);
+ IsVisibleProperty.SetValue(true, _yesButton, _noButton);
break;
case MessageBoxButton.YesNoCancel:
- Button.IsVisibleProperty.SetValue(false, _okButton);
- Button.IsVisibleProperty.SetValue(true, _cancelButton, _yesButton, _noButton);
+ IsVisibleProperty.SetValue(false, _okButton);
+ IsVisibleProperty.SetValue(true, _cancelButton, _yesButton, _noButton);
break;
}
}
public override void Close()
{
- MessageBoxResult result = Buttons switch
+ var result = Buttons switch
{
MessageBoxButton.OK => MessageBoxResult.OK,
MessageBoxButton.OKCancel => MessageBoxResult.Cancel,
diff --git a/src/Ursa/Controls/MessageBox/MessageBoxWindow.cs b/src/Ursa/Controls/MessageBox/MessageBoxWindow.cs
index ca850c2..3f6f51a 100644
--- a/src/Ursa/Controls/MessageBox/MessageBoxWindow.cs
+++ b/src/Ursa/Controls/MessageBox/MessageBoxWindow.cs
@@ -21,28 +21,29 @@ public class MessageBoxWindow(MessageBoxButton buttons) : Window
public const string PART_OKButton = "PART_OKButton";
public const string PART_CancelButton = "PART_CancelButton";
- private Button? _closeButton;
- private Button? _yesButton;
- private Button? _noButton;
- private Button? _okButton;
- private Button? _cancelButton;
-
- protected override Type StyleKeyOverride => typeof(MessageBoxWindow);
-
public static readonly StyledProperty MessageIconProperty =
AvaloniaProperty.Register(
nameof(MessageIcon));
+ private Button? _closeButton;
+
+ private Button? _cancelButton;
+ private Button? _noButton;
+ private Button? _okButton;
+ private Button? _yesButton;
+
+ public MessageBoxWindow() : this(MessageBoxButton.OK)
+ {
+ }
+
+ protected override Type StyleKeyOverride => typeof(MessageBoxWindow);
+
public MessageBoxIcon MessageIcon
{
get => GetValue(MessageIconProperty);
set => SetValue(MessageIconProperty, value);
}
- public MessageBoxWindow() : this(MessageBoxButton.OK)
- {
- }
-
protected override void OnApplyTemplate(TemplateAppliedEventArgs e)
{
base.OnApplyTemplate(e);
@@ -60,33 +61,32 @@ public class MessageBoxWindow(MessageBoxButton buttons) : Window
private void SetButtonVisibility()
{
+ var closeButtonVisible = buttons != MessageBoxButton.YesNo;
+ IsVisibleProperty.SetValue(closeButtonVisible, _closeButton);
switch (buttons)
{
case MessageBoxButton.OK:
- Button.IsVisibleProperty.SetValue(true, _okButton);
- Button.IsVisibleProperty.SetValue(false, _cancelButton, _yesButton, _noButton);
+ IsVisibleProperty.SetValue(true, _okButton);
+ IsVisibleProperty.SetValue(false, _cancelButton, _yesButton, _noButton);
break;
case MessageBoxButton.OKCancel:
- Button.IsVisibleProperty.SetValue(true, _okButton, _cancelButton);
- Button.IsVisibleProperty.SetValue(false, _yesButton, _noButton);
+ IsVisibleProperty.SetValue(true, _okButton, _cancelButton);
+ IsVisibleProperty.SetValue(false, _yesButton, _noButton);
break;
case MessageBoxButton.YesNo:
- Button.IsVisibleProperty.SetValue(false, _okButton, _cancelButton);
- Button.IsVisibleProperty.SetValue(true, _yesButton, _noButton);
+ IsVisibleProperty.SetValue(false, _okButton, _cancelButton);
+ IsVisibleProperty.SetValue(true, _yesButton, _noButton);
break;
case MessageBoxButton.YesNoCancel:
- Button.IsVisibleProperty.SetValue(false, _okButton);
- Button.IsVisibleProperty.SetValue(true, _cancelButton, _yesButton, _noButton);
+ IsVisibleProperty.SetValue(false, _okButton);
+ IsVisibleProperty.SetValue(true, _cancelButton, _yesButton, _noButton);
break;
}
}
private void OnCloseButtonClick(object? sender, RoutedEventArgs e)
{
- if (buttons == MessageBoxButton.OK)
- {
- Close(MessageBoxResult.OK);
- }
+ if (buttons == MessageBoxButton.OK) Close(MessageBoxResult.OK);
Close(MessageBoxResult.Cancel);
}
@@ -94,29 +94,29 @@ public class MessageBoxWindow(MessageBoxButton buttons) : Window
private void OnDefaultButtonClick(object? sender, RoutedEventArgs e)
{
if (Equals(sender, _okButton))
- {
Close(MessageBoxResult.OK);
- }
else if (Equals(sender, _cancelButton))
- {
Close(MessageBoxResult.Cancel);
- }
else if (Equals(sender, _yesButton))
- {
Close(MessageBoxResult.Yes);
- }
- else if (Equals(sender, _noButton))
- {
- Close(MessageBoxResult.No);
- }
+ else if (Equals(sender, _noButton)) Close(MessageBoxResult.No);
}
protected override void OnKeyUp(KeyEventArgs e)
{
base.OnKeyUp(e);
- if (e.Key == Key.Escape && buttons == MessageBoxButton.OK)
+ if (e.Key != Key.Escape) return;
+ switch (buttons)
{
- Close(MessageBoxResult.OK);
+ case MessageBoxButton.OK:
+ Close(MessageBoxResult.OK);
+ break;
+ case MessageBoxButton.OKCancel:
+ Close(MessageBoxResult.Cancel);
+ break;
+ case MessageBoxButton.YesNoCancel:
+ Close(MessageBoxResult.Cancel);
+ break;
}
}
@@ -124,4 +124,19 @@ public class MessageBoxWindow(MessageBoxButton buttons) : Window
{
BeginMoveDrag(e);
}
+
+ protected override void OnLoaded(RoutedEventArgs e)
+ {
+ base.OnLoaded(e);
+ var defaultButton = buttons switch
+ {
+ MessageBoxButton.OK => _okButton,
+ MessageBoxButton.OKCancel => _cancelButton,
+ MessageBoxButton.YesNo => _yesButton,
+ MessageBoxButton.YesNoCancel => _cancelButton,
+ _ => null
+ };
+ Button.IsDefaultProperty.SetValue(true, defaultButton);
+ defaultButton?.Focus();
+ }
}
\ No newline at end of file