Getting Started
Installation
// WPF (includes Core automatically)
Install-Package Notification.Wpf
// Or use Core directly for cross-platform
Install-Package Notification.CoreUI
// Platform-specific
Install-Package Notification.Console
Install-Package Notification.Avalonia
Install-Package Notification.Maui
DI Registration
WPF
services.AddWpfNotifications(config =>
{
config.DefaultExpirationTime = TimeSpan.FromSeconds(5);
config.MessagePosition = NotificationPosition.BottomRight;
});
Full App.xaml.cs example
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
public sealed partial class App
{
public static IServiceProvider Services => Hosting.Services;
private static IHost __Hosting;
public static IHost Hosting => __Hosting ??=
CreateHostBuilder(Environment.GetCommandLineArgs()).Build();
public static IHostBuilder CreateHostBuilder(string[] args) => Host
.CreateDefaultBuilder(args)
.ConfigureServices(ConfigureServices);
private static void ConfigureServices(HostBuilderContext host, IServiceCollection services)
{
services.AddWpfNotifications(config =>
{
config.DefaultExpirationTime = TimeSpan.FromSeconds(5);
});
}
protected override async void OnStartup(StartupEventArgs e)
{
var host = Hosting;
base.OnStartup(e);
await host.StartAsync();
}
protected override async void OnExit(ExitEventArgs e)
{
base.OnExit(e);
using var host = Hosting;
await host.StopAsync();
}
}
Console
services.AddConsoleNotifications();
Avalonia
var services = new ServiceCollection();
services.AddAvaloniaNotifications();
var provider = services.BuildServiceProvider();
var manager = provider.GetRequiredService<INotificationService>() as AvaloniaNotificationManager;
manager?.SetHost(this); // pass TopLevel
MAUI
// In MauiProgram.cs
public static MauiApp CreateMauiApp()
{
MauiAppBuilder builder = MauiApp.CreateBuilder();
builder
.UseMauiApp<App>()
.UseMauiCommunityToolkit() // required by Notification.Maui
.UseMauiNotifications(config =>
{
config.DefaultExpirationTime = TimeSpan.FromSeconds(3);
});
return builder.Build();
}
Windows Snackbar: if you need Snackbar (action buttons) on Windows, add
options.SetShouldEnableSnackbarOnWindows(true)inside.UseMauiCommunityToolkit(options => { ... }). This may cause "No COM servers are registered" in Blazor Hybrid or unpackaged apps. Without this option, simple Toast notifications still work on all platforms.
WPF — Static API (no DI)
public static class Notifier
{
private static readonly NotificationManager _manager = new();
public static void Show(string title, string message, NotificationType type)
{
_manager.Show(title, message, type);
}
}
First Notification
Builder API (cross-platform)
INotificationService service = /* from DI */;
service.Show(NotificationBuilder
.Create("Title", "Message")
.AsSuccess()
.Build());
WPF Classic API
var notificationManager = new NotificationManager();
notificationManager.Show("Title", "Message", NotificationType.Success);
In-Window Notifications (WPF)
XAML:
xmlns:notifications="clr-namespace:Notification.Wpf.Controls;assembly=Notification.Wpf"
<notifications:NotificationArea x:Name="WindowArea" Position="TopLeft" MaxItems="3"/>
Code:
notificationManager.Show("Title", "Message", NotificationType.Warning, "WindowArea");
Progress Bar
using var progress = notificationManager.ShowProgressBar("Processing...", showCancelButton: true);
for (var i = 0; i <= 100; i++)
{
progress.Cancel.ThrowIfCancellationRequested();
progress.Report(new NotificationProgressReport(i, $"Step {i}", "With progress", true));
await Task.Delay(TimeSpan.FromSeconds(0.02), progress.Cancel).ConfigureAwait(false);
}