In general, it’s nice to have a bunch of overlapping controls like yours because, as you noticed, there are performance issues. You want to minimize the number of controls that are present in your application at any given time.
If you have a limited number of pages, use TabControl .
If you have a large or dynamic number of pages, consider Frames and Page .
The third option is to have shell hosting management with ContentPresenter . Then, when you want to go to another page, just set the Content control to a new instance of your page view.
Your views are separate from your data models, right? If not, consider the template
source share