feat: add fix to drawer.

This commit is contained in:
rabbitism
2024-08-25 15:47:12 +08:00
parent 5429b86bda
commit 1553a936b5
4 changed files with 37 additions and 49 deletions

View File

@@ -10,7 +10,7 @@ public class CustomDrawerControl: DrawerControlBase
base.OnApplyTemplate(e);
if (_closeButton is not null)
{
_closeButton.IsVisible = IsCloseButtonVisible;
_closeButton.IsVisible = IsCloseButtonVisible ?? true;
}
}

View File

@@ -13,20 +13,30 @@ namespace Ursa.Controls;
[TemplatePart(PART_NoButton, typeof(Button))]
[TemplatePart(PART_OKButton, typeof(Button))]
[TemplatePart(PART_CancelButton, typeof(Button))]
public class DefaultDrawerControl: DrawerControlBase
public class DefaultDrawerControl : DrawerControlBase
{
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;
public static readonly StyledProperty<DialogButton> ButtonsProperty =
AvaloniaProperty.Register<DefaultDrawerControl, DialogButton>(
nameof(Buttons), DialogButton.OKCancel);
public static readonly StyledProperty<DialogMode> ModeProperty =
AvaloniaProperty.Register<DefaultDrawerControl, DialogMode>(
nameof(Mode), DialogMode.None);
public static readonly StyledProperty<string?> TitleProperty =
AvaloniaProperty.Register<DefaultDrawerControl, string?>(
nameof(Title));
private Button? _cancelButton;
private Button? _noButton;
private Button? _okButton;
private Button? _cancelButton;
public static readonly StyledProperty<DialogButton> ButtonsProperty = AvaloniaProperty.Register<DefaultDrawerControl, DialogButton>(
nameof(Buttons), DialogButton.OKCancel);
private Button? _yesButton;
public DialogButton Buttons
{
@@ -34,24 +44,18 @@ public class DefaultDrawerControl: DrawerControlBase
set => SetValue(ButtonsProperty, value);
}
public static readonly StyledProperty<DialogMode> ModeProperty = AvaloniaProperty.Register<DefaultDrawerControl, DialogMode>(
nameof(Mode), DialogMode.None);
public DialogMode Mode
{
get => GetValue(ModeProperty);
set => SetValue(ModeProperty, value);
}
public static readonly StyledProperty<string?> TitleProperty = AvaloniaProperty.Register<DefaultDrawerControl, string?>(
nameof(Title));
public string? Title
{
get => GetValue(TitleProperty);
set => SetValue(TitleProperty, value);
}
protected override void OnApplyTemplate(TemplateAppliedEventArgs e)
{
base.OnApplyTemplate(e);
@@ -63,58 +67,50 @@ public class DefaultDrawerControl: DrawerControlBase
Button.ClickEvent.AddHandler(OnDefaultButtonClick, _yesButton, _noButton, _okButton, _cancelButton);
SetButtonVisibility();
}
private void SetButtonVisibility()
{
bool isCloseButtonVisible = DataContext is IDialogContext || Buttons != DialogButton.YesNo;
Button.IsVisibleProperty.SetValue(isCloseButtonVisible, _closeButton);
var isCloseButtonVisible =
IsCloseButtonVisible ?? (DataContext is IDialogContext || Buttons != DialogButton.YesNo);
IsVisibleProperty.SetValue(isCloseButtonVisible, _closeButton);
switch (Buttons)
{
case DialogButton.None:
Button.IsVisibleProperty.SetValue(false, _okButton, _cancelButton, _yesButton, _noButton);
IsVisibleProperty.SetValue(false, _okButton, _cancelButton, _yesButton, _noButton);
break;
case DialogButton.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 DialogButton.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 DialogButton.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 DialogButton.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 OnDefaultButtonClick(object? sender, RoutedEventArgs e)
{
if (sender is Button button)
{
if (button == _okButton)
{
OnElementClosing(this, DialogResult.OK);
}
else if (button == _cancelButton)
{
OnElementClosing(this, DialogResult.Cancel);
}
else if (button == _yesButton)
{
OnElementClosing(this, DialogResult.Yes);
}
else if (button == _noButton)
{
OnElementClosing(this, DialogResult.No);
}
else if (button == _noButton) OnElementClosing(this, DialogResult.No);
}
}
public override void Close()
{
if (DataContext is IDialogContext context)
@@ -123,7 +119,7 @@ public class DefaultDrawerControl: DrawerControlBase
}
else
{
DialogResult result = Buttons switch
var result = Buttons switch
{
DialogButton.None => DialogResult.None,
DialogButton.OK => DialogResult.OK,

View File

@@ -37,15 +37,7 @@ public abstract class DrawerControlBase: OverlayFeedbackElement
set => SetValue(IsOpenProperty, value);
}
public static readonly StyledProperty<bool> IsCloseButtonVisibleProperty =
AvaloniaProperty.Register<DrawerControlBase, bool>(
nameof(IsCloseButtonVisible), defaultValue: true);
public bool IsCloseButtonVisible
{
get => GetValue(IsCloseButtonVisibleProperty);
set => SetValue(IsCloseButtonVisibleProperty, value);
}
internal bool? IsCloseButtonVisible { get; set; }
protected internal bool CanLightDismiss { get; set; }

View File

@@ -7,7 +7,7 @@ public class DrawerOptions
internal static DrawerOptions Default => new ();
public Position Position { get; set; } = Position.Right;
public bool CanLightDismiss { get; set; } = true;
public bool IsCloseButtonVisible { get; set; } = true;
public bool? IsCloseButtonVisible { get; set; } = true;
public double? MinWidth { get; set; } = null;
public double? MinHeight { get; set; } = null;
public double? MaxWidth { get; set; } = null;