2010-07-15 57 views
13

我有一个HeaderedContentControl包含一个TreeView。如何拉伸HeaderedContentControl的内容?

<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的内容区域?

回答

26

HeaderedContentControl默认控件模板是这样的:

<ControlTemplate TargetType="{x:Type HeaderedContentControl}"> 
    <StackPanel> 
     <ContentPresenter ContentSource="Header" /> 
     <ContentPresenter /> 
    </StackPanel> 
</ControlTemplate> 

的StackPanel中让每个孩子有自己的理想高度,所以树视图不会延长。

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

如果你想让它更可重复使用,在样式模板设置和使用VerticalContentAlignment:你可以与使用DockPanel中的模板替换它

<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。

+1

感谢您的详细解释和XAML片段。我想我可以直接使用DockPanel,但很高兴看到ControlTemplates如何实现相同效果的示例。 – dthrasher 2010-07-16 01:31:54