如何显示HeaderedItemsControl's Header
本文关键字:Header HeaderedItemsControl 何显示 显示 | 更新日期: 2023-09-27 18:06:46
我有以下代码:
<Window.Resources>
<DataTemplate x:Key="SectionTemplate" >
<TextBlock Text="{Binding Path=Name}" />
</DataTemplate>
</Window.Resources>
<Grid >
<Border>
<HeaderedItemsControl Header="Top1"
ItemsSource="{Binding Path=List1}"
ItemTemplate="{StaticResource SectionTemplate}"/>
</Border>
</Grid>
public class MainWindow
{
public List<Item> List1
{
get { return list1; }
set { list1 = value; }
}
public MainWindow()
{
list1.Add(new Item { Name = "abc" });
list1.Add(new Item { Name = "xxx" });
this.DataContext = this;
InitializeComponent();
}
}
public class Item
{
public string Name { get; set; }
}
由于某些原因,Items
被渲染,但没有标题。
正如文档所指出的:
HeaderedItemsControl有一个有限的默认样式。要创建具有自定义外观的HeaderedItemsControl,请创建一个新的ControlTemplate。
所以当你创建模板时,一定要包括一些ContentPresenter
,它与Header
绑定(例如使用ContentSource
)
。
<HeaderedItemsControl.Template>
<ControlTemplate TargetType="{x:Type HeaderedItemsControl}">
<Border>
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
<RowDefinition />
</Grid.RowDefinitions>
<ContentPresenter ContentSource="Header" />
<Separator Grid.Row="1" />
<ItemsPresenter Grid.Row="2" />
</Grid>
</Border>
</ControlTemplate>
</HeaderedItemsControl.Template>
(省略所有默认绑定(Margin, Background等))
您可以为标题创建一个DataTemplate
,就像您为项目所做的那样(这肯定比重做整个控件模板更具侵入性)。
。
<Window.Resources>
<DataTemplate x:Key="HeaderTemplate">
</DataTemplate>
</Window.Resources>
<HeaderedItemsControl Header="Top1"
HeaderTemplate="{StaticResource HeaderTemplate}"
ItemsSource="{Binding Path=List1}"
ItemTemplate="{StaticResource SectionTemplate}"
/>
不用e.g.。"Top1"就像这里一样,你可以绑定到一个对象,然后在DataTemplate中使用相对于该对象的绑定。
这种方法有一个问题,那就是为非控制元素(特别是TextBlock
)获取样式的必要方法有点复杂;另请参阅WPF一些未应用于DataTemplate控件的样式。(你也可能在使用ControlTemplate方法时遇到这种情况)