我正试图为扩展程序编写一个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
中,然后只覆盖Expander
中的任何Header
吗?
您可以使用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>
Header的属性Content只能包含一个对象。
如果您将这些对象合并到一个面板中:
<StackPanel>
<TextBlock>Some Text</TextBlock>
<TextBlock Text="{Binding SomeBinding}" />
<Button />
</StackPanel>
然后在模板中,您可以使用{binding}