Iciclecreek.Avalonia.WindowManager
4.0.0
dotnet add package Iciclecreek.Avalonia.WindowManager --version 4.0.0
NuGet\Install-Package Iciclecreek.Avalonia.WindowManager -Version 4.0.0
<PackageReference Include="Iciclecreek.Avalonia.WindowManager" Version="4.0.0" />
<PackageVersion Include="Iciclecreek.Avalonia.WindowManager" Version="4.0.0" />
<PackageReference Include="Iciclecreek.Avalonia.WindowManager" />
paket add Iciclecreek.Avalonia.WindowManager --version 4.0.0
#r "nuget: Iciclecreek.Avalonia.WindowManager, 4.0.0"
#:package Iciclecreek.Avalonia.WindowManager@4.0.0
#addin nuget:?package=Iciclecreek.Avalonia.WindowManager&version=4.0.0
#tool nuget:?package=Iciclecreek.Avalonia.WindowManager&version=4.0.0
Iciclecreek.Avalonia.WindowManager
This library implements a window manager for Avalonia with windows defined using Avalonia instead of native windows. This gives you the ability to create MDI style user interfaces in Avalonia, even in environments which don't support windowing like Android and iOS.

Installation
To install you need to add a reference to the nuget package Iciclecreek.Avalonia.WindowManager
dotnet add package Iciclecreek.Avalonia.WindowManager
Usage
This library defines the following controls:
- WindowsPanel - a panel which hosts managed windows
- ManagedWindow - a window implementation which is 100% Avalonia controls (no system windows).
- PortableWindow - a portable window abstraction that automatically uses native system windows on desktop or managed windows on mobile/console.
WindowsPanel control
The WindowsPanel control creates a region that hosts multiple windows. Simply add it to your main view xaml.
<wm:WindowsPanel x:Name="Windows"/>
ManagedWindow control
The ManagedWindow control is a clone of the Window control. It has standard Window properties like Title, WindowState, WindowStartupLocation, Position, etc. Instead of being hosted using Native windows, a ManagedWindow control is hosted via the Avalonia Overlay system.
Showing a window
To show a window you need to get an instance of the WindowsPanel and call Show().
For example:
var window = new ManagedWindow()
{
Title = "My window",
WindowStartupLocation=WindowStartupLocation.CenterScreen,
Width=300, Height=300
};
Windows.Show(window);
To close a window you simply call window.Close().
Showing a Dialog
To show a dialog is exactly the same as Avalonia, you instantiate a ManagedWindow and call .ShowDialog() passing in the parent window.
var dialogWindow = new ManagedWindow()
{
Title = "My window",
WindowStartupLocation=WindowStartupLocation.CenterScreen,
Width=300, Height=300
};
var result = await dialogWindow.ShowDialog<string>(parent);
To close a dialog you call Close(result);
PortableWindow control
The PortableWindow control is a portable window abstraction that lets you write a single window class that works across all platforms. When you call Show() or ShowDialog(), it automatically creates the appropriate host:
- On desktop (Windows/macOS/Linux) � a native system Window is used
- On mobile/single-view/Console (Android/iOS/browser) � a ManagedWindow is used
Derive your window classes from PortableWindow instead of Window or ManagedWindow to get automatic platform-appropriate windowing.
Defining a PortableWindow
<wm:PortableWindow xmlns="https://github.com/avaloniaui"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:wm="using:Iciclecreek.Avalonia.WindowManager"
x:Class="MyApp.MyPortableWindow"
Title="My Window"
Width="400" Height="300">
<TextBlock Text="Hello from a portable window!" />
</wm:PortableWindow>
Showing a PortableWindow
var window = new MyPortableWindow()
{
Title = "My window",
WindowStartupLocation = WindowStartupLocation.CenterScreen,
Width = 300, Height = 300
};
window.Show(parent);
To close a window you simply call window.Close().
Showing a PortableWindow as a Dialog
var dialog = new MyPortableWindow()
{
Title = "My dialog",
WindowStartupLocation = WindowStartupLocation.CenterOwner,
Width = 300, Height = 200
};
var result = await dialog.ShowDialog<string>(owner);
To close a dialog you call Close(result);
Supported Properties
PortableWindow exposes the same familiar window properties, automatically synchronized with the underlying host:
| Property | Description |
|---|---|
Title |
The window title |
Icon |
The window icon |
WindowStartupLocation |
Where the window appears when first shown |
SizeToContent |
How the window sizes to fit its content |
CanResize |
Whether the window can be resized |
WindowState |
Normal, Minimized, or Maximized |
ShowActivated |
Whether the window activates when shown |
Topmost |
Whether the window stays on top |
SystemDecorations |
Title bar and border decorations |
AnimateWindow |
Whether to animate window transitions |
ClosingBehavior |
How closing behaves with child windows |
Position |
The window position |
Customizing Host Selection
Override the CreateHost() method to control which host is used:
public class MyPortableWindow : PortableWindow
{
protected override IPortableWindowHost CreateHost()
{
// Force managed windows everywhere
return new ManagedWindowHost();
}
}
HotKeys
The window manager supports hotkeys for common actions like closing a window, minimizing, maximizing, etc.
| Hotkey | Action |
|---|---|
| Ctrl+F4 | Close the current window |
| Alt+- | Show System menu (Restore/Move/Size/Maximize/Minimize/Close) |
| Ctrl+Tab | Activate the previous window |
| Ctrl+Shift+Tab | Activate the next window |
| Ctrl+F6 | Activate the previous window |
| Ctrl+Shift+F6 | Activate the next window |
NOTE: On windows consoles Ctrl+Tab and Ctrl+Shift+Tab are handled by the console window, so Ctrl+F6 and Ctrl+Shift+F6 should be used instead.
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net6.0 is compatible. net6.0-android was computed. net6.0-ios was computed. net6.0-maccatalyst was computed. net6.0-macos was computed. net6.0-tvos was computed. net6.0-windows was computed. net7.0 was computed. net7.0-android was computed. net7.0-ios was computed. net7.0-maccatalyst was computed. net7.0-macos was computed. net7.0-tvos was computed. net7.0-windows was computed. net8.0 was computed. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. net9.0 was computed. net9.0-android was computed. net9.0-browser was computed. net9.0-ios was computed. net9.0-maccatalyst was computed. net9.0-macos was computed. net9.0-tvos was computed. net9.0-windows was computed. net10.0 was computed. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. |
-
net6.0
- Avalonia (>= 11.3.4)
- Avalonia.ReactiveUI (>= 11.3.4)
- IconPacks.Avalonia.Codicons (>= 1.3.1)
NuGet packages (1)
Showing the top 1 NuGet packages that depend on Iciclecreek.Avalonia.WindowManager:
| Package | Downloads |
|---|---|
|
Consolonia.ManagedWindows
Adds support for ManagedWindow, MessageBox, and IStorageProvider/IStorageFile/IStorageFolder. |
GitHub repositories (1)
Showing the top 1 popular GitHub repositories that depend on Iciclecreek.Avalonia.WindowManager:
| Repository | Stars |
|---|---|
|
Consolonia/Consolonia
A cross-platform UI framework for .NET.
|
| Version | Downloads | Last Updated |
|---|---|---|
| 4.0.0 | 123 | 2/20/2026 |
| 3.0.15 | 536 | 1/7/2026 |
| 3.0.14 | 113 | 1/4/2026 |
| 3.0.13 | 277 | 12/29/2025 |
| 3.0.12 | 101 | 12/29/2025 |
| 3.0.11 | 110 | 12/28/2025 |
| 3.0.10 | 286 | 11/6/2025 |
| 3.0.9 | 4,369 | 10/13/2025 |
| 3.0.8 | 1,672 | 8/26/2025 |
| 3.0.7 | 220 | 8/20/2025 |
| 3.0.6 | 1,606 | 8/17/2025 |
| 3.0.5 | 358 | 8/12/2025 |
| 3.0.4 | 221 | 8/12/2025 |
| 3.0.3 | 163 | 8/12/2025 |
| 3.0.2 | 168 | 8/12/2025 |
| 3.0.1 | 173 | 8/12/2025 |
| 3.0.0 | 163 | 8/11/2025 |
| 2.1.2 | 170 | 8/10/2025 |
| 2.1.1 | 140 | 8/9/2025 |
| 2.1.0 | 135 | 8/9/2025 |