The shell is nothing but the main silverlight app that gets loaded when your application is accessed. As far as I know you cannot load multiple shell applications on startup. What is the exact nature of your requirement? What do you mean by user can change
the shell?

I mean when user run application they can change layout display (example: Shell_1 has 4 regions, they can change to Shell_2 has 3 regions,... and I will manipulate which views will display in these regions)

I know that CreateShell of Bootstrapper run only one time when app loaded, so I have no way to create another shell.

When app loads, load Shell1 in MainRegion,or Shell2 whichever is default in your case. Now when changes layout (assuming from a drop down) to Shell2, load Shell2 in MainRegion. Here the concept of nested regions arise

Case 1

MainRegion (with Shell1)

SubRegion1

SubRegion2

SubRegion3

SubRegion4

﻿﻿﻿Case 2

MainRegion (with Shell2)

SubRegion1

SubRegion2

SubRegion3

With this you can easily achieve what you want to.

Note MainPage.xaml, Shell1.xaml and Shell2.xaml are in your Shell project. And in the CreateShell you would do

I understand you ideal, the problem is I don't know have to implement it.

I tried create a MainPage with a Region is "ShellRegion", but I don't know how can I load Shell1 or Shell2 onto that (Shell1 and Shell2 have another Region and other views will use region of Shell1 or Shell2).

I'm using PRISM not MEF so I can not use function Container.GetExportedValue();

Using MEF or Unity is purely a matter of choice. I'm more comfortable with MEF so used that in the example. Both work the same, the difference being the views are resolved from UnityContainer if you use Unity or from AggregateCatalog if you use MEF.

For more information read up Basic region navigation (page 119) in the developers guide pdf.

As far as I understand Shell1 seems to load modules into regions in it? If that is the case is Shell1 downloading the modules using modulemanager? For starters add a textblock in Shell1 that says something like "Shell1" so you know if Shell1 is loaded in
the MainPage. You can use my app as a reference. If you're still having trouble upload your sample app and i'll have a look tonight !!

Heres your modified app. The problem was you were using ItemsControl for all your regions. ItemsControl uses AllAciveRegion so you cant
deactive views in this kind og region. I changed them to ContentControls, which use SingleActiveRegion where you can deactivate views.

Also few things I noted

You need a lot of refactoring and clean up

Modules can be loosely coupled

Your InterViewModelShell and FormModeShell have regions with same name, like ContentRegion/TopRegion etc. which can cause issues, i.e region names clash. Either you need different names or make sure those sub regions are removed when you deactivate a view.

I would suggest you to have a look at the MEF way. Makes code very clean.

By loosely coupled I mean modularising your app even more. You could create separate modules for the views you load in different regions. Also I noticed you have added reference to your modules project. Instead you could use modulemanager to download the
xap when needed, i.e. on demand.

Can you please check that the sample app that you included a link to in your post on ﻿Apr 26 at 6.33pm is still accessible? I've downloaded it and tried to open it with both WinZip and WinRar and I keep getting an error message indicating that the archive
is damaged. Maybe I'm doing something wrong.

Your replies to this discussion thread are very helpful and it would be great to be able to access the sample application.