feat: drag MessageBox.

This commit is contained in:
Zhang Dian
2024-01-12 00:04:20 +08:00
parent 5a41e0e566
commit 2c9a4700a5

View File

@@ -13,7 +13,7 @@ namespace Ursa.Controls;
[TemplatePart(PART_OKButton, typeof(Button))] [TemplatePart(PART_OKButton, typeof(Button))]
[TemplatePart(PART_CancelButton, typeof(Button))] [TemplatePart(PART_CancelButton, typeof(Button))]
[TemplatePart(PART_YesButton, typeof(Button))] [TemplatePart(PART_YesButton, typeof(Button))]
public class MessageBoxWindow: Window public class MessageBoxWindow : Window
{ {
public const string PART_CloseButton = "PART_CloseButton"; public const string PART_CloseButton = "PART_CloseButton";
public const string PART_YesButton = "PART_YesButton"; public const string PART_YesButton = "PART_YesButton";
@@ -22,17 +22,18 @@ public class MessageBoxWindow: Window
public const string PART_CancelButton = "PART_CancelButton"; public const string PART_CancelButton = "PART_CancelButton";
private MessageBoxButton _buttonConfigs; private MessageBoxButton _buttonConfigs;
private Button? _closeButton; private Button? _closeButton;
private Button? _yesButton; private Button? _yesButton;
private Button? _noButton; private Button? _noButton;
private Button? _okButton; private Button? _okButton;
private Button? _cancelButton; private Button? _cancelButton;
protected override Type StyleKeyOverride => typeof(MessageBoxWindow); protected override Type StyleKeyOverride => typeof(MessageBoxWindow);
public static readonly StyledProperty<MessageBoxIcon> MessageIconProperty = AvaloniaProperty.Register<MessageBoxWindow, MessageBoxIcon>( public static readonly StyledProperty<MessageBoxIcon> MessageIconProperty =
nameof(MessageIcon)); AvaloniaProperty.Register<MessageBoxWindow, MessageBoxIcon>(
nameof(MessageIcon));
public MessageBoxIcon MessageIcon public MessageBoxIcon MessageIcon
{ {
@@ -57,22 +58,27 @@ public class MessageBoxWindow: Window
{ {
_closeButton.Click -= OnCloseButtonClick; _closeButton.Click -= OnCloseButtonClick;
} }
if (_yesButton != null) if (_yesButton != null)
{ {
_yesButton.Click -= OnYesButtonClick; _yesButton.Click -= OnYesButtonClick;
} }
if (_noButton != null) if (_noButton != null)
{ {
_noButton.Click -= OnNoButtonClick; _noButton.Click -= OnNoButtonClick;
} }
if (_okButton != null) if (_okButton != null)
{ {
_okButton.Click -= OnOKButtonClick; _okButton.Click -= OnOKButtonClick;
} }
if (_cancelButton != null) if (_cancelButton != null)
{ {
_cancelButton.Click -= OnCancelButtonClick; _cancelButton.Click -= OnCancelButtonClick;
} }
_yesButton = e.NameScope.Find<Button>(PART_YesButton); _yesButton = e.NameScope.Find<Button>(PART_YesButton);
_noButton = e.NameScope.Find<Button>(PART_NoButton); _noButton = e.NameScope.Find<Button>(PART_NoButton);
_okButton = e.NameScope.Find<Button>(PART_OKButton); _okButton = e.NameScope.Find<Button>(PART_OKButton);
@@ -82,22 +88,27 @@ public class MessageBoxWindow: Window
{ {
_closeButton.Click += OnCloseButtonClick; _closeButton.Click += OnCloseButtonClick;
} }
if (_yesButton is not null) if (_yesButton is not null)
{ {
_yesButton.Click += OnYesButtonClick; _yesButton.Click += OnYesButtonClick;
} }
if (_noButton is not null) if (_noButton is not null)
{ {
_noButton.Click += OnNoButtonClick; _noButton.Click += OnNoButtonClick;
} }
if (_okButton is not null) if (_okButton is not null)
{ {
_okButton.Click += OnOKButtonClick; _okButton.Click += OnOKButtonClick;
} }
if (_cancelButton is not null) if (_cancelButton is not null)
{ {
_cancelButton.Click += OnCancelButtonClick; _cancelButton.Click += OnCancelButtonClick;
} }
SetButtonVisibility(); SetButtonVisibility();
} }
@@ -143,24 +154,25 @@ public class MessageBoxWindow: Window
{ {
Close(MessageBoxResult.OK); Close(MessageBoxResult.OK);
} }
Close(MessageBoxResult.Cancel); Close(MessageBoxResult.Cancel);
} }
private void OnYesButtonClick(object sender, RoutedEventArgs e) private void OnYesButtonClick(object sender, RoutedEventArgs e)
{ {
Close(MessageBoxResult.Yes); Close(MessageBoxResult.Yes);
} }
private void OnNoButtonClick(object sender, RoutedEventArgs e) private void OnNoButtonClick(object sender, RoutedEventArgs e)
{ {
Close(MessageBoxResult.No); Close(MessageBoxResult.No);
} }
private void OnOKButtonClick(object sender, RoutedEventArgs e) private void OnOKButtonClick(object sender, RoutedEventArgs e)
{ {
Close(MessageBoxResult.OK); Close(MessageBoxResult.OK);
} }
private void OnCancelButtonClick(object sender, RoutedEventArgs e) private void OnCancelButtonClick(object sender, RoutedEventArgs e)
{ {
Close(MessageBoxResult.Cancel); Close(MessageBoxResult.Cancel);
@@ -174,4 +186,12 @@ public class MessageBoxWindow: Window
Close(MessageBoxResult.OK); Close(MessageBoxResult.OK);
} }
} }
protected override void OnPointerPressed(PointerPressedEventArgs e)
{
if (TopLevel.GetTopLevel(this) is Window toplevel)
{
toplevel.BeginMoveDrag(e);
}
}
} }