using System.Runtime.CompilerServices;
namespace Melskin.Controls;
///
/// 提供静态方法来显示各种类型的轻量级通知,支持屏幕级别和窗口级别的消息提示。
/// 通过调用Screen属性可以获取一个IToastService实例,用于在整个应用范围内显示通知。
/// 使用For方法为特定的窗口创建一个IToastService实例,允许在该窗口上下文中显示通知。
///
public static class Toast
{
///
/// 获取一个IToastService实例,该实例允许在整个应用程序范围内显示屏幕级别的通知。
/// 通过这个属性,可以调用相关的显示方法来发送不同类型的通知消息,如成功、信息、错误和警告等。
///
public static IToastService Screen { get; }
private static readonly ConditionalWeakTable WindowManagers = new();
static Toast() { Screen = new ToastManager(new ScreenHost()); }
///
/// 为指定的窗口创建一个IToastService实例,以便在该窗口上下文中显示轻量级通知。
///
/// 要为其创建通知服务的窗口对象。如果传递null,则会抛出异常。
/// 与给定窗口关联的IToastService实例,用于显示通知。
/// 当提供的window参数为null时抛出。
public static IToastService For(Window window)
{
if (window == null) throw new ArgumentNullException(nameof(window));
return WindowManagers.GetValue(window, w => new ToastManager(new WindowHost(w)));
}
}