Click here to Skip to main content
Licence CPOL
First Posted 25 May 2009
Views 22,804
Downloads 648
Bookmarked 16 times

WPF MasterPage

By | 25 May 2009 | Article
Create a MasterPage like functionality in WPF with 15 lines of code
WPF Masterpage Image

Introduction

This article shows a way of creating MasterPage-like functionality in WPF with 15 lines of code.

Background

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.

Solution

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 Page.

 <Page ...>
     <DockPanel Name="pnlMaster" >
         <Frame Name="frmHeader" DockPanel.Dock="Top" 
		Source="/MasterPages/HeaderPage.xaml" Height="100"></Frame>
         <Frame Name="frmFooter" DockPanel.Dock="Bottom" 
		Source="/MasterPages/FooterPage.xaml"></Frame>
         <StackPanel Name="spnlNavigator" DockPanel.Dock="Left" 
		Width="150" Background="Orange">
             <Button Name="bntContentPage1" Margin="10,10,10,10" 
		Content="Content Page 1" Click="OnClick" 
		CommandParameter="ContentPage1.xaml" />
             
             <Button Name="bntContentPage2" Margin="10,10,10,10" 
		Content="Content Page 2" Click="OnClick" 
		CommandParameter="ContentPage2.xaml" />
          
          </StackPanel>
          <Frame Name="frmMain" Source="/ContentPages/ContentPage1.xaml"></Frame>
     </DockPanel>
     <x:Code>
         <![CDATA[
          void OnClick(object sender, RoutedEventArgs e)
          {
             frmMain.Source = new Uri("/ContentPages/" + 
		((Button)sender).CommandParameter.ToString(), UriKind.Relative);
          }
       ]]>
     </x:Code>
 </Page>

History

  • 25th May, 2009: Initial post

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)

About the Author

pkaelin

Software Developer
Swissphone Telecom AG
Switzerland Switzerland

Member

Pascal has been a passionate software developer since 1998. A native of Switzerland, he has worked around the world, from Ireland, England and Germany to as far afield as Australia and China.
 
Having started in C and moved on to C++, he now develops in C# on .NET and always does his best to keep up with new technologies such as WPF, WCF, WF and Silverlight.
 
He is interested in networking with like-minded software developers around the world.

Sign Up to vote   Poor Excellent
Add a reason or comment to your vote: x
Votes of 3 or less require a comment

Comments and Discussions

 
You must Sign In to use this message board. (secure sign-in)
 
Search this forum  
 FAQ
    Noise  Layout  Per page   
  Refresh
GeneralMy vote of 5 PinmemberMember 80510903:20 12 Aug '11  
Generalgood aticle PinmemberDonsw7:16 14 Jun '09  
QuestionWhat about data binding? Pinmembermattraffel4:00 2 Jun '09  
GeneralMy vote of 1 PinmemberMember 15974631:22 26 May '09  
GeneralRe: My vote of 1 Pinmemberpkaelin19:54 26 May '09  
GeneralRe: My vote of 1 [modified] Pinmembermattraffel15:45 1 Jun '09  

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.

Permalink | Advertise | Privacy | Mobile
Web01 | 2.5.120517.1 | Last Updated 25 May 2009
Article Copyright 2009 by pkaelin
Everything else Copyright © CodeProject, 1999-2012
Terms of Use
Layout: fixed | fluid