This article shows a way of creating MasterPage-like functionality in WPF with 15 lines of code.
One of the great things in .NET 2.0 was MasterPage. Unfortunately, MasterPage no longer exists in WPF. I have seen a lot of different approaches to achieving ASP.NET MasterPage-like functionality in WPF, with varying levels of complexity. I was not satisfied with any of the techniques and therefore came up with my own approach.
My solution is
Frame. Frames can be used as a kind of content placeholder. "Ding". Surely that must ring a bell.
Using the Code
The sample code was written in C# using Visual Studio 2008 IDE. All the relevant code is in StartPage.xaml and should be self-explanatory. I will summarize the code shown below. You use a
DockPanel for your MasterPage layouter. Then you add a first
Frame and dock it to the top. Add a second
Frame and dock it to the bottom, then add a
StackPanel for your navigation (or whatever layout control you fancy) and dock it to the left or right. Finally add a
Frame that will contain your content pages. The trick is to set the
Source property of that
Frame to a
<DockPanel Name="pnlMaster" >
<Frame Name="frmHeader" DockPanel.Dock="Top"
<Frame Name="frmFooter" DockPanel.Dock="Bottom"
<StackPanel Name="spnlNavigator" DockPanel.Dock="Left"
<Button Name="bntContentPage1" Margin="10,10,10,10"
Content="Content Page 1" Click="OnClick"
<Button Name="bntContentPage2" Margin="10,10,10,10"
Content="Content Page 2" Click="OnClick"
<Frame Name="frmMain" Source="/ContentPages/ContentPage1.xaml"></Frame>
- 25th May, 2009: Initial post