A Blazor UI element for a drag and drop, overlayed window
$ dotnet add package Soenneker.Blazor.Floating.WindowsModern, customizable floating windows for Blazor
dotnet add package Soenneker.Blazor.Floating.Windows
// Program.cs
using Soenneker.Blazor.Floating.Windows.Registrars;
builder.Services.AddFloatingWindowAsScoped();
// _Imports.razor
@using Soenneker.Blazor.Floating.Windows
<FloatingWindow Title="My Window" Width="400" Height="300">
<div>
<h3>Hello World!</h3>
<p>This is a floating window with your content.</p>
<button @onclick="() => window?.Close()">Close</button>
</div>
</FloatingWindow>
Built-in themes:
<FloatingWindow StyleOptions="FloatingWindowStyleOptions.DefaultLight">...</FloatingWindow>
<FloatingWindow StyleOptions="FloatingWindowStyleOptions.DefaultDark">...</FloatingWindow>
<FloatingWindow StyleOptions="FloatingWindowStyleOptions.DemoTheme">...</FloatingWindow>
Custom styling:
<FloatingWindow StyleOptions="new FloatingWindowStyleOptions
{
BackgroundColor = "#f8f9fa",
BorderColor = "#dee2e6",
BorderRadius = "12px",
TitleBarBackgroundColor = "#007bff",
TitleBarTextColor = "#ffffff",
CloseButtonTextColor = "#ffffff",
CloseButtonHoverBackgroundColor = "rgba(255, 255, 255, 0.2)",
CustomClass = "my-custom-window",
CustomStyles = new Dictionary<string, string>
{
["backdrop-filter"] = "blur(10px)",
["border"] = "2px solid #007bff"
}
}">...</FloatingWindow>
<FloatingWindow @ref="myWindow"
Title="Advanced Window"
Width="500"
Height="400"
InitialX="100"
InitialY="100"
Draggable="true"
Resizable="true"
ShowCloseButton="true"
ShowTitleBar="true"
CenterOnShow="true"
ConstrainToViewport="true"
OnShow="OnWindowShow"
OnHide="OnWindowHide"
OnDragStart="OnDragStart"
OnDragEnd="OnDragEnd">
<div class="window-content">
<h3>Advanced Features</h3>
<p>This window demonstrates all the available features.</p>
<div class="controls">
<button @onclick="() => myWindow?.SetPosition(200, 200)">Move to (200,200)</button>
<button @onclick="() => myWindow?.SetSize(600, 500)">Resize to 600x500</button>
<button @onclick="() => myWindow?.BringToFront()">Bring to Front</button>
</div>
</div>
</FloatingWindow>
@code {
private FloatingWindow? myWindow;
private void OnWindowShow() => Console.WriteLine("Window shown!");
private void OnWindowHide() => Console.WriteLine("Window hidden!");
private void OnDragStart() => Console.WriteLine("Dragging started!");
private void OnDragEnd() => Console.WriteLine("Dragging ended!");
}
| Property | Type | Default | Description |
|---|---|---|---|
Title | string | "Window" | Title bar text |
Width | int? | 400 | Initial width (px) |
Height | int? | 300 | Initial height (px) |
InitialX | int? | 100 | Initial X position |
InitialY | int? | 100 | Initial Y position |
Draggable | bool? | true | Enable dragging |
Resizable | bool? | true | Enable resizing |
ShowCloseButton | bool? | true | Show close button |
ShowTitleBar | bool? | true | Show title bar |
StyleOptions | FloatingWindowStyleOptions | DefaultLight | Styling config |
| Event | Description |
|---|---|
OnShow | Window shown |
OnHide | Window hidden |
OnDragStart | Dragging started |
OnDragEnd | Dragging ended |
| Method | Description |
|---|---|
Show() | Show window |
Hide() | Hide window |
Toggle() | Toggle visibility |
GetPosition() | Get (x, y) |
SetPosition(x, y) | Set position |
GetSize() | Get (width, height) |
SetSize(width, height) | Set size |
BringToFront() | Bring window to front |