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