add Avalonia Dialogs

This commit is contained in:
2025-11-10 15:57:51 +01:00
parent 1ab775aa3e
commit c19c858de1
9 changed files with 431 additions and 1 deletions

View File

@@ -0,0 +1,47 @@
using Avalonia.Controls;
namespace Pilz.UI.AvaloniaUI.Dialogs;
public partial class AvaloniaDialogBase
{
public static T Show<T>(string? title, object? icon, object? tag = null) where T : AvaloniaFlyoutBase
{
return Show(CreatePanelInstance<T>(tag), title, icon);
}
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);
}
public static T Show<T>(T dialogPanel, string? title, object? icon) where T : AvaloniaFlyoutBase
{
CreateForm(dialogPanel, title, icon, WindowStartupLocation.CenterScreen).Show();
return dialogPanel;
}
public static async Task<T> ShowDialog<T>(T dialogPanel, Window parent, string? title, object? icon) where T : AvaloniaFlyoutBase
{
await CreateForm(dialogPanel, title, icon, WindowStartupLocation.CenterOwner).ShowDialog(parent);
return dialogPanel;
}
private static T CreatePanelInstance<T>(object? tag) where T : AvaloniaFlyoutBase
{
var dialogPanel = Activator.CreateInstance<T>();
dialogPanel.Tag = tag;
return dialogPanel;
}
private static AvaloniaDialogBase CreateForm<T>(T dialogPanel, string? title, object? icon, WindowStartupLocation startPosition) where T : AvaloniaFlyoutBase
{
var dialog = new AvaloniaDialogBase
{
Title = title,
Icon = icon as WindowIcon,
WindowStartupLocation = startPosition,
};
dialog.SetContent(dialogPanel);
return dialog;
}
}