![]() |
VOOZH | about |
dotnet add package Frank.Wpf.Hosting --version 6.0.0
NuGet\Install-Package Frank.Wpf.Hosting -Version 6.0.0
<PackageReference Include="Frank.Wpf.Hosting" Version="6.0.0" />
<PackageVersion Include="Frank.Wpf.Hosting" Version="6.0.0" />Directory.Packages.props
<PackageReference Include="Frank.Wpf.Hosting" />Project file
paket add Frank.Wpf.Hosting --version 6.0.0
#r "nuget: Frank.Wpf.Hosting, 6.0.0"
#:package Frank.Wpf.Hosting@6.0.0
#addin nuget:?package=Frank.Wpf.Hosting&version=6.0.0Install as a Cake Addin
#tool nuget:?package=Frank.Wpf.Hosting&version=6.0.0Install as a Cake Tool
Frank.Wpf.Hosting is a library that allows you to host WPF without XAML and using Dependency Injection.
dotnet add package Frank.Wpf.Hosting
using Frank.Wpf.Hosting;
public static class Program
{
[STAThread] // Required for WPF
public static void Main()
{
var builder = Host.CreateWpfHostBuilder(); // Create a WPF host builder
builder.Services.AddTransient<IMyService, MyService>(); // Register services
var host = builder.Build<MyWindow>(); // Create the host with the window inheriting from MainWindow
host.Run(); // Start the application and show the window
}
}
To get this point you need to create a window that inherits from MainWindow:
using Frank.Wpf.Hosting;
public class MyWindow : MainWindow
{
public MyWindow(IMyService myService)
{
// Use the service
}
}
If you want to have multiple windows, and not just dialogs, you can use the IWindowFactory interface:
using Frank.Wpf.Hosting;
public class MyService : IMyService
{
private readonly IWindowFactory _windowFactory;
public MyService(IWindowFactory windowFactory)
{
_windowFactory = windowFactory;
}
public void DoSomething()
{
_windowFactory.CreateWindow<OtherWindow>(true); // Create a new window and show it (true)
}
}
You can also get the window by name using the IWindowFactory interface:
using Frank.Wpf.Hosting;
public class MyService : IMyService
{
private readonly IWindowFactory _windowFactory;
public MyService(IWindowFactory windowFactory)
{
_windowFactory = windowFactory;
}
public void DoSomething()
{
_windowFactory.CreateWindow("DisplayWindow", true); // Create a new window and show it (true)
}
}
Note: The window name is the actual property name of the window, not the class name.
If you want to share data between windows, you can use the IApplicationCache interface, and access it using the
Dispatcher directly when needed:
using Frank.Wpf.Hosting;
public class DisplayWindow : Window
{
private readonly IApplicationCache _cache;
private readonly Label _label;
private readonly Timer _timer;
public DisplayWindow(IApplicationCache cache)
{
_cache = cache;
Title = "Hello, World!";
Name = "DisplayWindow";
Width = 800;
Height = 600;
_label = new Label
{
Content = "Hello, World!"
};
Content = _label;
_timer = new Timer(1000);
_timer.Elapsed += (_, _) => UpdateLabel();
_timer.Start();
}
private void UpdateLabel() => Dispatcher.Invoke(() => _label.Content = _cache.Get<string>("message")); // Access the cache using the Dispatcher because the timer runs on a different thread
}
public class InputWindow : Window
{
private readonly IApplicationCache _cache;
private readonly TextBox _textBox;
public InputWindow(IApplicationCache cache)
{
_cache = cache;
Title = "Hello, World!";
Width = 800;
Height = 600;
_textBox = new TextBox();
var button = new Button
{
Content = "Set message"
};
button.Click += (sender, args) => _cache.Set("message", _textBox.Text);
Content = new StackPanel
{
Children =
{
_textBox,
button
}
};
}
}
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net9.0-windows7.0 net9.0-windows7.0 is compatible. net10.0-windows net10.0-windows was computed. |
Showing the top 1 NuGet packages that depend on Frank.Wpf.Hosting:
| Package | Downloads |
|---|---|
|
Frank.Wpf.Tests.App
Package Description |
This package is not used by any popular GitHub repositories.
| Version | Downloads | Last Updated |
|---|---|---|
| 6.0.0 | 358 | 4/14/2025 |
| 6.0.0-preview | 106 | 3/31/2026 |
| 5.3.0 | 234 | 8/18/2024 |
| 5.3.0-preview | 267 | 4/14/2025 |
| 5.2.0 | 218 | 8/17/2024 |
| 5.2.0-preview | 201 | 8/18/2024 |
| 5.1.0 | 199 | 8/17/2024 |
| 5.1.0-preview | 194 | 8/17/2024 |
| 5.0.0 | 222 | 8/16/2024 |
| 5.0.0-preview | 190 | 8/17/2024 |
| 4.0.0 | 223 | 8/15/2024 |
| 4.0.0-preview | 197 | 8/15/2024 |
| 3.1.0 | 217 | 8/12/2024 |
| 3.1.0-preview | 180 | 8/14/2024 |
| 3.0.0 | 201 | 8/12/2024 |
| 3.0.0-preview | 197 | 8/12/2024 |
| 2.3.0 | 214 | 8/12/2024 |
| 2.3.0-preview | 193 | 8/12/2024 |
| 2.2.0 | 198 | 8/7/2024 |
| 2.2.0-preview | 194 | 8/12/2024 |