Primary APIs:
Window dialog patternsPopup, Flyout, ContextMenu, ToolTipSplitView for drawer/sheet patternsWindowNotificationManager and notification contractsReference docs:
25-popups-flyouts-tooltips-and-overlays.md53-menu-controls-contextmenu-and-menuflyout-patterns.md56-managed-notifications-and-window-notification-manager.mdHTML/CSS modal idiom:
<div class="backdrop"></div>
<div class="modal">Are you sure?</div>
Avalonia pattern:
Window owned by the parent window,var confirmed = await new ConfirmDeleteWindow().ShowDialog<bool>(owner);
HTML/CSS:
.drawer { position: fixed; right: 0; width: 380px; height: 100vh; }
Avalonia patterns:
SplitView + overlay mode,<SplitView DisplayMode="Overlay"
IsPaneOpen="{CompiledBinding IsInspectorOpen}"
OpenPaneLength="380"
PanePlacement="Right" />
| Web pattern | Avalonia |
|---|---|
| popover | Flyout / Popup |
| context menu | ContextMenu |
| tooltip | ToolTip.Tip |
<Button Content="Options">
<Button.Flyout>
<MenuFlyout>
<MenuItem Header="Rename" />
<MenuItem Header="Duplicate" />
</MenuFlyout>
</Button.Flyout>
</Button>
HTML/CSS toasts are mapped to notification manager APIs:
var manager = new WindowNotificationManager(owner)
{
Position = NotificationPosition.TopRight
};
manager.Show(new Notification("Saved", "Project settings updated.", NotificationType.Success));
<button class="danger">Delete</button>
<div class="modal-backdrop"></div>
<dialog class="confirm">Are you sure?</dialog>
<div class="toast success">Item removed.</div>
.modal-backdrop { position: fixed; inset: 0; background: rgba(0,0,0,.45); }
.confirm { border: none; border-radius: 12px; padding: 20px; }
.toast.success { position: fixed; top: 16px; right: 16px; }
<StackPanel Spacing="10">
<Button Content="Delete"
Classes="destructive"
Command="{CompiledBinding ConfirmDeleteCommand}" />
</StackPanel>
if (await new ConfirmDeleteWindow().ShowDialog<bool>(owner))
{
await vm.DeleteAsync();
_notifications.Show(new Notification("Deleted", "Item removed.", NotificationType.Information));
}