WPF TabItem HeaderTemplate
示例代码:
如您所见,TabItem标题始终是具有不同内容的堆栈面板:
你怎么能把它放在一个模板中,这样我就没有重复的stackpanel代码?
试着这样做:
结果是:
- “财产’标题’不止一次。”
- “对象’对象’已经有了一个孩子,无法添加’TextBlock’。’对象’只能接受一个孩子。”
树标题唯一常见的是Margin =“5”。 在第二个和第三个选项卡中,stackpanel是无关紧要的,因为它只有一个子节点。 您可以使用HeaderTemplate或ItemContainerStyle来实现它:
现在你不重复任何事情。
您还可以将stackpanel的属性提取为样式以避免重复它们:
如果您想要更多的代码重用,您应该考虑类似MVVM的方法:
如果您不能对所有标头使用单个DataTemplate,则可以使用HeaderTemplateSelector
我认为只有在绑定Tab集合并动态生成它们时才会使用HeaderTemplate。 如果在ViewModel中设置对象,这将起作用(Header属性是具有隐式DataTemplates的项的集合,可以根据其类型生成TextBlocks或Rectangles)。
否则,您需要为StackPanel
通用样式以使它们完全相同并保存重复,或者将TabItem.Header
内容的第一个元素设置为派生自StackPanel
的自定义控件。
我会自己选择Style路线,除非真的迫切需要从XAML中删除StackPanel线。