feat: simplify dialog option.

This commit is contained in:
rabbitism
2024-02-10 00:42:44 +08:00
parent 896d22dcce
commit 7a9bdf231d
8 changed files with 51 additions and 39 deletions

View File

@@ -36,8 +36,7 @@
OnContent="Modal" />
<ToggleSwitch
Content="ClickOnMaskToClose"
IsChecked="{Binding CanCloseMaskToClose}"
IsVisible="{Binding #defaultModal.IsChecked}"
IsChecked="{Binding CanLightDismiss}"
OffContent="No"
OnContent="Yes" />
<StackPanel Orientation="Horizontal">
@@ -81,8 +80,7 @@
OnContent="Modal" />
<ToggleSwitch
Content="ClickOnMaskToClose"
IsChecked="{Binding CanCloseMaskToClose}"
IsVisible="{Binding #modal.IsChecked}"
IsChecked="{Binding CanLightDismiss}"
OffContent="No"
OnContent="Yes" />
<Button Command="{Binding ShowCustomDialogCommand}" Content="Show Dialog" />

View File

@@ -55,11 +55,11 @@ public class DialogDemoViewModel: ObservableObject
set => SetProperty(ref _isModal, value);
}
private bool _canCloseMaskToClose;
public bool CanCloseMaskToClose
private bool _canLightDismiss;
public bool CanLightDismiss
{
get => _canCloseMaskToClose;
set => SetProperty(ref _canCloseMaskToClose, value);
get => _canLightDismiss;
set => SetProperty(ref _canLightDismiss, value);
}
private DialogResult? _defaultResult;
@@ -118,7 +118,7 @@ public class DialogDemoViewModel: ObservableObject
Title = "Please select a date",
Mode = SelectedMode,
Buttons = SelectedButton,
CanClickOnMaskToClose = CanCloseMaskToClose,
CanLightDismiss = CanLightDismiss,
HorizontalAnchor = HorizontalPosition.Right,
HorizontalOffset = 50,
VerticalAnchor = VerticalPosition.Top,
@@ -136,7 +136,8 @@ public class DialogDemoViewModel: ObservableObject
{
Title = "Please select a date",
Mode = SelectedMode,
Buttons = SelectedButton
Buttons = SelectedButton,
CanLightDismiss = CanLightDismiss,
});
}
}
@@ -169,14 +170,15 @@ public class DialogDemoViewModel: ObservableObject
Result = await OverlayDialog.ShowCustomModal<DialogWithAction, DialogWithActionViewModel, bool>(
vm, IsGlobal ? null : "LocalHost", options: new OverlayDialogOptions()
{
CanClickOnMaskToClose = CanCloseMaskToClose,
CanLightDismiss = CanLightDismiss,
});
Date = vm.Date;
}
else
{
OverlayDialog.ShowCustom<DialogWithAction, DialogWithActionViewModel>(new DialogWithActionViewModel(),
IsGlobal ? null : "LocalHost");
IsGlobal ? null : "LocalHost",
options: new OverlayDialogOptions{ CanLightDismiss = CanLightDismiss });
}
}

View File

@@ -29,7 +29,6 @@ public abstract class DialogControlBase : OverlayFeedbackElement
internal double? VerticalOffset { get; set; }
internal double? HorizontalOffsetRatio { get; set; }
internal double? VerticalOffsetRatio { get; set; }
internal bool CanClickOnMaskToClose { get; set; }
internal bool CanLightDismiss { get; set; }
internal bool CanDragMove { get; set; }

View File

@@ -26,5 +26,4 @@ public class DialogOptions
public DialogButton Button { get; set; } = DialogButton.OKCancel;
public bool IsCloseButtonVisible { get; set; } = true;
public bool CanDragMove { get; set; } = true;
}

View File

@@ -17,16 +17,32 @@ public enum VerticalPosition
public class OverlayDialogOptions
{
internal static OverlayDialogOptions Default { get; } = new OverlayDialogOptions();
public bool CanClickOnMaskToClose { get; set; } = false;
public HorizontalPosition HorizontalAnchor { get; set; } = HorizontalPosition.Center;
public VerticalPosition VerticalAnchor { get; set; } = VerticalPosition.Center;
/// <summary>
/// This attribute is only used when HorizontalAnchor is not Center
/// </summary>
public double? HorizontalOffset { get; set; } = null;
/// <summary>
/// This attribute is only used when VerticalAnchor is not Center
/// </summary>
public double? VerticalOffset { get; set; } = null;
/// <summary>
/// Only works for DefaultDialogControl
/// </summary>
public DialogMode Mode { get; set; } = DialogMode.None;
/// <summary>
/// Only works for DefaultDialogControl
/// </summary>
public DialogButton Buttons { get; set; } = DialogButton.OKCancel;
/// <summary>
/// Only works for DefaultDialogControl
/// </summary>
public string? Title { get; set; } = null;
public bool IsCloseButtonVisible { get; set; } = true;
/// <summary>
/// Only works for CustomDialogControl
/// </summary>
public bool ShowCloseButton { get; set; } = true;
public bool CanLightDismiss { get; set; }
public bool CanDragMove { get; set; } = true;
}

View File

@@ -18,7 +18,7 @@ public static class OverlayDialog
DataContext = vm,
};
ConfigureDefaultDialogControl(t, options);
host?.AddDialog(t);
host.AddDialog(t);
}
public static void Show(Control control, object? vm, string? hostId = null,
@@ -32,7 +32,7 @@ public static class OverlayDialog
DataContext = vm,
};
ConfigureDefaultDialogControl(t, options);
host?.AddDialog(t);
host.AddDialog(t);
}
@@ -63,8 +63,8 @@ public static class OverlayDialog
Content = new TView(),
DataContext = vm,
};
ConfigureDialogControl(t, options);
host?.AddDialog(t);
ConfigureCustomDialogControl(t, options);
host.AddDialog(t);
}
public static void ShowCustom(Control control, object? vm, string? hostId = null,
@@ -77,8 +77,8 @@ public static class OverlayDialog
Content = control,
DataContext = vm,
};
ConfigureDialogControl(t, options);
host?.AddDialog(t);
ConfigureCustomDialogControl(t, options);
host.AddDialog(t);
}
public static void ShowCustom(object? vm, string? hostId = null,
@@ -94,7 +94,7 @@ public static class OverlayDialog
Content = view,
DataContext = vm,
};
ConfigureDialogControl(t, options);
ConfigureCustomDialogControl(t, options);
host.AddDialog(t);
}
@@ -110,7 +110,7 @@ public static class OverlayDialog
DataContext = vm,
};
ConfigureDefaultDialogControl(t, options);
host?.AddModalDialog(t);
host.AddModalDialog(t);
return t.ShowAsync<DialogResult>(token);
}
@@ -125,7 +125,7 @@ public static class OverlayDialog
DataContext = vm,
};
ConfigureDefaultDialogControl(t, options);
host?.AddModalDialog(t);
host.AddModalDialog(t);
return t.ShowAsync<DialogResult>(token);
}
@@ -140,8 +140,8 @@ public static class OverlayDialog
Content = new TView(),
DataContext = vm,
};
ConfigureDialogControl(t, options);
host?.AddModalDialog(t);
ConfigureCustomDialogControl(t, options);
host.AddModalDialog(t);
return t.ShowAsync<TResult?>(token);
}
@@ -155,8 +155,8 @@ public static class OverlayDialog
Content = control,
DataContext = vm,
};
ConfigureDialogControl(t, options);
host?.AddModalDialog(t);
ConfigureCustomDialogControl(t, options);
host.AddModalDialog(t);
return t.ShowAsync<TResult?>(token);
}
@@ -173,12 +173,12 @@ public static class OverlayDialog
Content = view,
DataContext = vm,
};
ConfigureDialogControl(t, options);
host?.AddModalDialog(t);
ConfigureCustomDialogControl(t, options);
host.AddModalDialog(t);
return t.ShowAsync<TResult?>(token);
}
private static void ConfigureDialogControl(CustomDialogControl control, OverlayDialogOptions? options)
private static void ConfigureCustomDialogControl(CustomDialogControl control, OverlayDialogOptions? options)
{
options ??= OverlayDialogOptions.Default;
control.HorizontalAnchor = options.HorizontalAnchor;
@@ -189,8 +189,7 @@ public static class OverlayDialog
control.HorizontalAnchor == HorizontalPosition.Center ? null : options.HorizontalOffset;
control.VerticalOffset =
options.VerticalAnchor == VerticalPosition.Center ? null : options.VerticalOffset;
control.CanClickOnMaskToClose = options.CanClickOnMaskToClose;
control.IsCloseButtonVisible = options.IsCloseButtonVisible;
control.IsCloseButtonVisible = options.ShowCloseButton;
control.CanLightDismiss = options.CanLightDismiss;
control.CanDragMove = options.CanDragMove;
}
@@ -206,7 +205,6 @@ public static class OverlayDialog
control.HorizontalAnchor == HorizontalPosition.Center ? null : options.HorizontalOffset;
control.VerticalOffset =
options.VerticalAnchor == VerticalPosition.Center ? null : options.VerticalOffset;
control.CanClickOnMaskToClose = options.CanClickOnMaskToClose;
control.Mode = options.Mode;
control.Buttons = options.Buttons;
control.Title = options.Title;

View File

@@ -85,7 +85,7 @@ public partial class OverlayDialogHost
PureRectangle? mask = null;
if (control.CanLightDismiss)
{
CreateOverlayMask(false, control.CanLightDismiss);
mask = CreateOverlayMask(false, control.CanLightDismiss);
}
if (mask is not null)
{
@@ -136,7 +136,7 @@ public partial class OverlayDialogHost
/// <param name="control"></param>
internal void AddModalDialog(DialogControlBase control)
{
var mask = CreateOverlayMask(true, control.CanClickOnMaskToClose);
var mask = CreateOverlayMask(true, control.CanLightDismiss);
_layers.Add(new DialogPair(mask, control));
control.SetAsModal(true);
ResetZIndices();

View File

@@ -96,7 +96,7 @@ public partial class OverlayDialogHost: Canvas
}
else if(canCloseOnClick)
{
rec.SetCurrentValue(Shape.FillProperty, Brushes.Transparent);
rec.SetCurrentValue(PureRectangle.BackgroundProperty, Brushes.Transparent);
}
if (canCloseOnClick)
{