Il modello di controllo di default per HeaderedContentControl
è qualcosa di simile:
<ControlTemplate TargetType="{x:Type HeaderedContentControl}">
<StackPanel>
<ContentPresenter ContentSource="Header" />
<ContentPresenter />
</StackPanel>
</ControlTemplate>
Lo StackPanel lascia ogni bambino ha la propria altezza desiderata, in modo che il controllo TreeView non sarà allungare. Si potrebbe sostituirlo con un modello che utilizza un 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>
Se si vuole rendere più riutilizzabile, impostare il modello in uno stile e utilizzare 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>
In questo modo, tutta la vostra HeaderedContentControls riempirà il contenuto per impostazione predefinita, e puoi sovrascriverlo impostando VerticalContentAlignment su un singolo controllo.
In alternativa, è possibile utilizzare direttamente un DockPanel anziché un HeaderedContentControl.
Grazie per la spiegazione dettagliata e gli snippet XAML. Penso che potrei semplicemente usare DockPanel direttamente, ma è bello vedere un esempio di come ControlTemplates può ottenere lo stesso effetto. – dthrasher