HeaderTemplate包含多个项目

时间:2012-01-11 15:27:16

标签: wpf templates xaml styles

我正在尝试为扩展程序编写HeaderTemplate。到目前为止,我注意到所有示例都使用{Binding}关键字从标头中获取数据。但是,如果标题中有多个控件会发生什么?如何指定应将这些控件插入特定位置?

<Window.Resources>
    <Style x:Key="ExpanderStyle" TargetType="{x:Type Expander}">
        <Setter Property="HeaderTemplate">
            <Setter.Value>
                <DataTemplate>
                    <!-- what do I put in here? -->
                </DataTemplate>
            </Setter.Value>
        </Setter>
    </Style>
</Window.Resources>

<Expander Style="{StaticResource ExpanderStyle}">
    <Expander.Header>
        <StackPanel Orientation="Horizontal">
            <TextBlock>Some Text</TextBlock>
            <TextBlock Text="{Binding SomeBinding}" />
            <Button />
        </StackPanel>
    </Expander.Header>
    <Image Source="https://www.google.com/logos/2012/steno12-hp.jpg" />
</Expander>

我应该将绑定移动到样式中的HeaderTemplate,只是覆盖HeaderExpander的任何内容吗?

2 个答案:

答案 0 :(得分:2)

您可以使用ContentPresenter在模板中插入通常的内容

例如:

<Style x:Key="ExpanderStyle" TargetType="{x:Type Expander}">
    <Setter Property="HeaderTemplate">
        <Setter.Value>
            <DataTemplate>
                <Border BorderBrush="Blue" BorderThickness="2">
                    <ContentPresenter />
                </Border>
            </DataTemplate>
        </Setter.Value>
    </Setter>
</Style>

答案 1 :(得分:0)

标题的属性内容只能包含一个对象。

如果您在一个面板中合并这些对象:

<StackPanel>
    <TextBlock>Some Text</TextBlock>
    <TextBlock Text="{Binding SomeBinding}" />
    <Button />
</StackPanel>

然后在模板中你可以使用{binding}