У меня есть HeaderedContentControl, который содержит TreeView.
<HeaderedContentControl Header="Steps" HorizontalAlignment="Stretch" VerticalAlignment="Stretch">
<TreeView Name="WizardSteps" ItemsSource="{Binding WizardSteps}" HorizontalAlignment="Stretch" VerticalAlignment="Stretch">
<!-- Hierarchical data templates here -->
</TreeView>
</HeaderedContentControl>
Хотя фрагменты HeaderedContentControl для заполнения области в ее родительской сетке мои TreeView управляют, только занимает небольшую часть доступного пространства.
Как я заставляю свой TreeView расширяться для заполнения предметной области моего HeaderedContentControl?
Шаблон элемента управления по умолчанию для HeaderedContentControl
выглядит примерно так:
<ControlTemplate TargetType="{x:Type HeaderedContentControl}">
<StackPanel>
<ContentPresenter ContentSource="Header" />
<ContentPresenter />
</StackPanel>
</ControlTemplate>
Панель StackPanel позволяет каждому дочернему элементу иметь свою собственную желаемую высоту, поэтому TreeView не растягивается. Вы можете заменить его шаблоном, использующим 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>
Если вы хотите сделать его более многоразовым, установите шаблон в Style и используйте 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>
Таким образом, все ваши HeaderedContentControls будут иметь заполнение содержимого по умолчанию, и вы можете отменить это, установив VerticalContentAlignment для отдельного элемента управления.
В качестве альтернативы можно использовать DockPanel непосредственно вместо HeaderedContentControl.