When you need to create a specific kind of Shell window, for example as you mentioned, based on an UserControl, you should override the CreateShell method of the UnityBootstrapper class in order to put the Shell
A proposed solution to perform this, it is to create a Bootstraper class, which inherits from the UnityBootstrapper class and override the CreateShell method.
The following code implements the aforementioned solution:
internal class Bootstrapper : UnityBootstrapper
protected override DependencyObject CreateShell()
// Get ShellContainer from IOC
var shellUserControl = this.Container.Resolve<ShellUserControl>();
ShellContainer shellContainer = new ShellContainer();
// Add the ShellContainer UserControl to the main window
//more code here...
public partial class App : Application
protected override void OnStartup(StartupEventArgs e)
Bootstrapper bootStrapper = new Bootstrapper();
I hope you can find this answer helpful.