La plantilla de control por defecto para HeaderedContentControl
es algo como esto:
<ControlTemplate TargetType="{x:Type HeaderedContentControl}">
<StackPanel>
<ContentPresenter ContentSource="Header" />
<ContentPresenter />
</StackPanel>
</ControlTemplate>
El StackPanel permite a cada niño tiene su propio altura deseada, por lo que el TreeView no estirar. Se podría reemplazarlo con una plantilla que utiliza una DockPanel:
<HeaderedContentControl Header="Steps" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" VerticalContentAlignment="Stretch" >
<HeaderedContentControl.Template>
<ControlTemplate TargetType="HeaderedContentControl">
<DockPanel>
<ContentPresenter DockPanel.Dock="Top" ContentSource="Header" />
<ContentPresenter />
</DockPanel>
</ControlTemplate>
</HeaderedContentControl.Template>
Si quieres que sea más reutilizable, establece la plantilla en un estilo y utilizar VerticalContentAlignment:
<Style TargetType="HeaderedContentControl">
<Setter Property="VerticalContentAlignment" Value="Stretch"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="HeaderedContentControl">
<DockPanel>
<ContentPresenter DockPanel.Dock="Top" ContentSource="Header" />
<ContentPresenter VerticalAlignment="{TemplateBinding VerticalContentAlignment}" />
</DockPanel>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
De esta manera, toda su HeaderedContentControls tendrá su contenido relleno por defecto, y puede anularlo configurando VerticalContentAlignment en un control individual.
Alternativamente, puede utilizar un DockPanel directamente en lugar de un HeaderedContentControl.
Gracias por su explicación detallada y por los fragmentos de XAML. Creo que puedo usar el DockPanel directamente, pero es bueno ver un ejemplo de cómo ControlTemplates puede lograr el mismo efecto. – dthrasher