49 lines
1.7 KiB
C#
49 lines
1.7 KiB
C#
using System;
|
|
using System.Threading.Tasks;
|
|
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;
|
|
}
|
|
|
|
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
|
|
{
|
|
var dialog = new AvaloniaDialogBase
|
|
{
|
|
Title = title,
|
|
Icon = icon as WindowIcon,
|
|
WindowStartupLocation = startPosition,
|
|
};
|
|
dialog.SetContent(dialogPanel);
|
|
return dialog;
|
|
}
|
|
} |