【问题标题】:How do I stretch the contents of a HeaderedContentControl?如何拉伸 HeaderedContentControl 的内容?
【发布时间】:2011-03-16 15:31:20
【问题描述】:

我有一个包含 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 的内容区域?

【问题讨论】:

    标签: wpf layout wpf-controls


    【解决方案1】:

    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。

    【讨论】:

    • 感谢您的详细解释和 XAML sn-ps。我想我可能只是直接使用 DockPanel,但很高兴看到 ControlTemplates 如何达到相同效果的示例。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-13
    • 2010-11-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多