I suppose you need to specify Footer and Header in each window, but you want to have consistent look & feel.
In general, if you want to add some reusable visual stuff around content, you should use content control and edit its template.
If you need to specify also header for the content, you should use HeaderedContentControl and edit it's template.
If you need to specify also footer, just create you own control inherited from HeaderedContentControl and specify Footer property.
here is expampe of usage:
<controls:HeaderFooterContentControl
Header="Some simple header"
Footer="There could be xaml footer as well!>
<Grid>
<!--Place your content here-->
</Grid>
</controls:HeaderFooterContentControl>
and implementation:
public class HeaderFooterContentControl : HeaderedContentControl
{
public object Footer
{
get { return (object) GetValue(FooterProperty); }
set { SetValue(FooterProperty, value); }
}
public static readonly DependencyProperty FooterProperty = DependencyProperty.Register("Footer", typeof (object), typeof (HeaderFooterContentControl));
}
and the template:
<Style TargetType="controls:HeaderFooterContentControl">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="controls:HeaderFooterContentControl">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition />
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<Border Grid.Row="0" Background="White">
<ContentControl Content="{TemplateBinding Header}" Foreground="Red"
ContentTemplate="" />
</Border>
<Border Grid.Row="1" Background="Red">
<ContentControl Content="{TemplateBinding Content}" Foreground="White"
ContentTemplate="{TemplateBinding ContentTemplate}"
ContentTemplateSelector="{TemplateBinding ContentTemplateSelector}"/>
</Border>
<Border Grid.Row="2" Background="White">
<ContentControl Content="{TemplateBinding Footer}" Foreground="Red" />
</Border>
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
Notice, that this have nothing to do with MVVM, but since Header and Footer are dependency properties, it could be easily used in any MVVM scenario.
I would definitely avoid binding to viewmodel properties in ControlTemplate if possible.