Как я расширяю содержание HeaderedContentControl?

У меня есть 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?

14
задан dthrasher 15 July 2010 в 20:35
поделиться

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.

27
ответ дан 1 December 2019 в 09:59
поделиться
Другие вопросы по тегам:

Похожие вопросы: