complete avalonia flyouts
This commit is contained in:
@@ -1,5 +1,3 @@
|
|||||||
using System;
|
|
||||||
using System.Threading.Tasks;
|
|
||||||
using Avalonia.Controls;
|
using Avalonia.Controls;
|
||||||
|
|
||||||
namespace Pilz.UI.AvaloniaUI.Dialogs;
|
namespace Pilz.UI.AvaloniaUI.Dialogs;
|
||||||
@@ -8,12 +6,12 @@ public partial class AvaloniaDialogBase
|
|||||||
{
|
{
|
||||||
public static T Show<T>(string? title, object? icon, object? tag = null) where T : AvaloniaFlyoutBase
|
public static T Show<T>(string? title, object? icon, object? tag = null) where T : AvaloniaFlyoutBase
|
||||||
{
|
{
|
||||||
return Show(CreatePanelInstance<T>(tag), title, icon);
|
return Show(AvaloniaFlyoutBase.CreatePanelInstance<T>(tag), title, icon);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static Task<T> ShowDialog<T>(Window parent, string? title, object? icon, object? tag = null) where T : AvaloniaFlyoutBase
|
public static Task<T> ShowDialog<T>(Window parent, string? title, object? icon, object? tag = null) where T : AvaloniaFlyoutBase
|
||||||
{
|
{
|
||||||
return ShowDialog(CreatePanelInstance<T>(tag), parent, title, icon);
|
return ShowDialog(AvaloniaFlyoutBase.CreatePanelInstance<T>(tag), parent, title, icon);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static T Show<T>(T dialogPanel, string? title, object? icon) where T : AvaloniaFlyoutBase
|
public static T Show<T>(T dialogPanel, string? title, object? icon) where T : AvaloniaFlyoutBase
|
||||||
@@ -28,13 +26,6 @@ public partial class AvaloniaDialogBase
|
|||||||
return dialogPanel;
|
return dialogPanel;
|
||||||
}
|
}
|
||||||
|
|
||||||
internal static T CreatePanelInstance<T>(object? tag) where T : AvaloniaFlyoutBase
|
|
||||||
{
|
|
||||||
var dialogPanel = Activator.CreateInstance<T>();
|
|
||||||
dialogPanel.Tag = tag;
|
|
||||||
return dialogPanel;
|
|
||||||
}
|
|
||||||
|
|
||||||
internal static AvaloniaDialogBase CreateForm<T>(T dialogPanel, string? title, object? icon, WindowStartupLocation startPosition) where T : AvaloniaFlyoutBase
|
internal static AvaloniaDialogBase CreateForm<T>(T dialogPanel, string? title, object? icon, WindowStartupLocation startPosition) where T : AvaloniaFlyoutBase
|
||||||
{
|
{
|
||||||
var dialog = new AvaloniaDialogBase
|
var dialog = new AvaloniaDialogBase
|
||||||
|
|||||||
@@ -1,26 +1,39 @@
|
|||||||
using System;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Threading.Tasks;
|
|
||||||
using Avalonia.Controls;
|
using Avalonia.Controls;
|
||||||
using Avalonia.Media;
|
using Avalonia.Media;
|
||||||
|
using Avalonia.VisualTree;
|
||||||
using DialogHostAvalonia;
|
using DialogHostAvalonia;
|
||||||
using MsBox.Avalonia.ViewModels;
|
|
||||||
|
|
||||||
namespace Pilz.UI.AvaloniaUI.Dialogs;
|
namespace Pilz.UI.AvaloniaUI.Dialogs;
|
||||||
|
|
||||||
public partial class AvaloniaFlyoutBase
|
public partial class AvaloniaFlyoutBase
|
||||||
{
|
{
|
||||||
public static void Show<T>(ContentControl owner, string? title, IImage? icon, object? tag = null) where T : AvaloniaFlyoutBase
|
public static Task Show<T>(ContentControl owner, object? tag = null) where T : AvaloniaFlyoutBase
|
||||||
{
|
{
|
||||||
Show(t, owner, title, icon);
|
return Show(CreatePanelInstance<T>(tag), owner);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void Showy<T>(T content, ContentControl owner, string? title, IImage? icon) where T : AvaloniaFlyoutBase
|
public static Task Show<T>(ContentControl owner, string? title, IImage? icon, object? tag = null) where T : AvaloniaFlyoutBase
|
||||||
{
|
{
|
||||||
Show(t, owner, title, icon);
|
return Show(CreatePanelInstance<T>(tag), owner, title, icon);
|
||||||
}
|
}
|
||||||
|
|
||||||
public async static Task<T> Show<T>(T content, ContentControl owner) where T : AvaloniaFlyoutBase
|
public static Task Show<T>(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<T>(object? tag) where T : AvaloniaFlyoutBase
|
||||||
|
{
|
||||||
|
var dialogPanel = Activator.CreateInstance<T>();
|
||||||
|
dialogPanel.Tag = tag;
|
||||||
|
return dialogPanel;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static async Task<T> Show<T>(T content, ContentControl owner) where T : AvaloniaFlyoutBase
|
||||||
{
|
{
|
||||||
// Add styles
|
// Add styles
|
||||||
DialogHostStyles? style = null;
|
DialogHostStyles? style = null;
|
||||||
@@ -38,7 +51,7 @@ public partial class AvaloniaFlyoutBase
|
|||||||
};
|
};
|
||||||
owner.Content = null;
|
owner.Content = null;
|
||||||
dh.Content = parentContent;
|
dh.Content = parentContent;
|
||||||
dh.CloseOnClickAway = content.CancelButtonVisible;
|
dh.CloseOnClickAway = content.CancelButtonVisible && content.RegisterDialogCancel;
|
||||||
dh.CloseOnClickAwayParameter = "FlyoutDialogIdentifier_Cancel";
|
dh.CloseOnClickAwayParameter = "FlyoutDialogIdentifier_Cancel";
|
||||||
dh.DialogClosing += (ss, ee) =>
|
dh.DialogClosing += (ss, ee) =>
|
||||||
{
|
{
|
||||||
@@ -47,30 +60,20 @@ public partial class AvaloniaFlyoutBase
|
|||||||
};
|
};
|
||||||
content.OnClose += (s, e) =>
|
content.OnClose += (s, e) =>
|
||||||
{
|
{
|
||||||
// ...
|
if (s is AvaloniaFlyoutBase flyout
|
||||||
};
|
&& flyout.FindAncestorOfType<DialogHost>() is
|
||||||
owner.Content = dh;
|
{
|
||||||
|
CurrentSession.IsEnded: false,
|
||||||
// Handle close
|
} host)
|
||||||
var tcs = new TaskCompletionSource<T>();
|
DialogHost.Close(host.Identifier);
|
||||||
content.SetCloseAction(() =>
|
|
||||||
{
|
|
||||||
var r = content.GetButtonResult();
|
|
||||||
|
|
||||||
if (dh.CurrentSession != null && dh.CurrentSession.IsEnded == false)
|
|
||||||
{
|
|
||||||
DialogHost.Close(dh.Identifier);
|
|
||||||
}
|
|
||||||
|
|
||||||
owner.Content = null;
|
owner.Content = null;
|
||||||
dh.Content = null;
|
dh.Content = null;
|
||||||
owner.Content = parentContent;
|
owner.Content = parentContent;
|
||||||
if (style != null)
|
if (style != null)
|
||||||
{
|
|
||||||
owner.Styles.Remove(style);
|
owner.Styles.Remove(style);
|
||||||
}
|
};
|
||||||
tcs.TrySetResult(r);
|
owner.Content = dh;
|
||||||
});
|
|
||||||
|
|
||||||
// Show dialog
|
// Show dialog
|
||||||
await DialogHost.Show(content, dh.Identifier);
|
await DialogHost.Show(content, dh.Identifier);
|
||||||
|
|||||||
@@ -1,4 +1,3 @@
|
|||||||
using System;
|
|
||||||
using System.ComponentModel;
|
using System.ComponentModel;
|
||||||
using Avalonia;
|
using Avalonia;
|
||||||
using Avalonia.Controls;
|
using Avalonia.Controls;
|
||||||
|
|||||||
@@ -7,12 +7,13 @@
|
|||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
|
||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
<Version>1.2.5</Version>
|
<Version>1.2.6</Version>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<PackageReference Include="Avalonia" Version="11.3.8" />
|
<PackageReference Include="Avalonia" Version="11.3.8" />
|
||||||
<PackageReference Include="Avalonia.Svg" Version="11.3.0" />
|
<PackageReference Include="Avalonia.Svg" Version="11.3.0" />
|
||||||
|
<PackageReference Include="DialogHost.Avalonia" Version="0.9.3" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
|
|||||||
Reference in New Issue
Block a user