2010-07-15 50 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