diff --git a/Pilz.UI.AvaloniaUI/Dialogs/AvaloniaDialogBase.Statics.cs b/Pilz.UI.AvaloniaUI/Dialogs/AvaloniaDialogBase.Statics.cs index 725025f..8501c20 100644 --- a/Pilz.UI.AvaloniaUI/Dialogs/AvaloniaDialogBase.Statics.cs +++ b/Pilz.UI.AvaloniaUI/Dialogs/AvaloniaDialogBase.Statics.cs @@ -1,5 +1,3 @@ -using System; -using System.Threading.Tasks; using Avalonia.Controls; namespace Pilz.UI.AvaloniaUI.Dialogs; @@ -8,12 +6,12 @@ public partial class AvaloniaDialogBase { public static T Show(string? title, object? icon, object? tag = null) where T : AvaloniaFlyoutBase { - return Show(CreatePanelInstance(tag), title, icon); + return Show(AvaloniaFlyoutBase.CreatePanelInstance(tag), title, icon); } public static Task ShowDialog(Window parent, string? title, object? icon, object? tag = null) where T : AvaloniaFlyoutBase { - return ShowDialog(CreatePanelInstance(tag), parent, title, icon); + return ShowDialog(AvaloniaFlyoutBase.CreatePanelInstance(tag), parent, title, icon); } public static T Show(T dialogPanel, string? title, object? icon) where T : AvaloniaFlyoutBase @@ -28,13 +26,6 @@ public partial class AvaloniaDialogBase return dialogPanel; } - internal static T CreatePanelInstance(object? tag) where T : AvaloniaFlyoutBase - { - var dialogPanel = Activator.CreateInstance(); - dialogPanel.Tag = tag; - return dialogPanel; - } - internal static AvaloniaDialogBase CreateForm(T dialogPanel, string? title, object? icon, WindowStartupLocation startPosition) where T : AvaloniaFlyoutBase { var dialog = new AvaloniaDialogBase diff --git a/Pilz.UI.AvaloniaUI/Dialogs/AvaloniaFlyoutBase.Statics.cs b/Pilz.UI.AvaloniaUI/Dialogs/AvaloniaFlyoutBase.Statics.cs index 3a5f2e4..4ce02cf 100644 --- a/Pilz.UI.AvaloniaUI/Dialogs/AvaloniaFlyoutBase.Statics.cs +++ b/Pilz.UI.AvaloniaUI/Dialogs/AvaloniaFlyoutBase.Statics.cs @@ -1,26 +1,39 @@ -using System; -using System.Linq; -using System.Threading.Tasks; using Avalonia.Controls; using Avalonia.Media; +using Avalonia.VisualTree; using DialogHostAvalonia; -using MsBox.Avalonia.ViewModels; namespace Pilz.UI.AvaloniaUI.Dialogs; public partial class AvaloniaFlyoutBase { - public static void Show(ContentControl owner, string? title, IImage? icon, object? tag = null) where T : AvaloniaFlyoutBase + public static Task Show(ContentControl owner, object? tag = null) where T : AvaloniaFlyoutBase { - Show(t, owner, title, icon); + return Show(CreatePanelInstance(tag), owner); + } + + public static Task Show(ContentControl owner, string? title, IImage? icon, object? tag = null) where T : AvaloniaFlyoutBase + { + return Show(CreatePanelInstance(tag), owner, title, icon); + } + + public static Task Show(T content, ContentControl owner, string? title, IImage? icon) where T : AvaloniaFlyoutBase + { + if (!string.IsNullOrWhiteSpace(title)) + content.Title = title; + if (icon != null) + content.TitleIcon = icon; + return Show(content, owner); + } + + internal static T CreatePanelInstance(object? tag) where T : AvaloniaFlyoutBase + { + var dialogPanel = Activator.CreateInstance(); + dialogPanel.Tag = tag; + return dialogPanel; } - public static void Showy(T content, ContentControl owner, string? title, IImage? icon) where T : AvaloniaFlyoutBase - { - Show(t, owner, title, icon); - } - - public async static Task Show(T content, ContentControl owner) where T : AvaloniaFlyoutBase + public static async Task Show(T content, ContentControl owner) where T : AvaloniaFlyoutBase { // Add styles DialogHostStyles? style = null; @@ -38,7 +51,7 @@ public partial class AvaloniaFlyoutBase }; owner.Content = null; dh.Content = parentContent; - dh.CloseOnClickAway = content.CancelButtonVisible; + dh.CloseOnClickAway = content.CancelButtonVisible && content.RegisterDialogCancel; dh.CloseOnClickAwayParameter = "FlyoutDialogIdentifier_Cancel"; dh.DialogClosing += (ss, ee) => { @@ -47,30 +60,20 @@ public partial class AvaloniaFlyoutBase }; content.OnClose += (s, e) => { - // ... - }; - owner.Content = dh; - - // Handle close - var tcs = new TaskCompletionSource(); - content.SetCloseAction(() => - { - var r = content.GetButtonResult(); - - if (dh.CurrentSession != null && dh.CurrentSession.IsEnded == false) - { - DialogHost.Close(dh.Identifier); - } - + if (s is AvaloniaFlyoutBase flyout + && flyout.FindAncestorOfType() is + { + CurrentSession.IsEnded: false, + } host) + DialogHost.Close(host.Identifier); + owner.Content = null; dh.Content = null; owner.Content = parentContent; if (style != null) - { owner.Styles.Remove(style); - } - tcs.TrySetResult(r); - }); + }; + owner.Content = dh; // Show dialog await DialogHost.Show(content, dh.Identifier); diff --git a/Pilz.UI.AvaloniaUI/Dialogs/AvaloniaFlyoutBase.axaml.cs b/Pilz.UI.AvaloniaUI/Dialogs/AvaloniaFlyoutBase.axaml.cs index 1205cd7..3144c1a 100644 --- a/Pilz.UI.AvaloniaUI/Dialogs/AvaloniaFlyoutBase.axaml.cs +++ b/Pilz.UI.AvaloniaUI/Dialogs/AvaloniaFlyoutBase.axaml.cs @@ -1,4 +1,3 @@ -using System; using System.ComponentModel; using Avalonia; using Avalonia.Controls; diff --git a/Pilz.UI.AvaloniaUI/Pilz.UI.AvaloniaUI.csproj b/Pilz.UI.AvaloniaUI/Pilz.UI.AvaloniaUI.csproj index c56ac9c..b7c9dea 100644 --- a/Pilz.UI.AvaloniaUI/Pilz.UI.AvaloniaUI.csproj +++ b/Pilz.UI.AvaloniaUI/Pilz.UI.AvaloniaUI.csproj @@ -7,12 +7,13 @@ - 1.2.5 + 1.2.6 +