基本上,我不明白这里的真正区别是什么:
Microsoft TabItem 的代码使用:
<ContentPresenter ContentSource="Header" ... />
那么,什么情况下会使用Content
属性而不是(或者除了)ContentSource
?
基本上,我不明白这里的真正区别是什么:
Microsoft TabItem 的代码使用:
<ContentPresenter ContentSource="Header" ... />
那么,什么情况下会使用Content
属性而不是(或者除了)ContentSource
?
当ContentPresenter位于模板中时,应仅使用此属性。模板包含具有ContentSource设置为"Abc"的ContentPresenter时,Content、ContentTemplate和ContentTemplateSelector属性将自动别名为Abc、AbcTemplate和AbcTemplateSelector。从.NET Framework 3.5 Service Pack 1开始,将ContentSource设置为"Abc"还会导致ContentStringFormat属性被别名为AbcStringFormat。
对于此属性最常用的两个值是"Content"和"Header"。
(MSDN)
ContentSource
显然为了方便而一次性设置更多的属性。
实际上,以下声明:
<ContentPresenter ContentSource="Header" />
执行以下初始化操作。
<ContentPresenter Content="{TemplateBinding Header}"
ContentTemplate="{TemplateBinding HeaderTemplate}"
ContentTemplateSelector="{TemplateBinding HeaderTemplateSelector}"
ContentStringFormat="{TemplateBinding HeaderStringFormat}" />
仅当模板化控件上存在依赖属性时,它才会单独为每个属性执行此操作。
ContentPresenter
而没有设置Content
仍然可以工作。现在我知道它是因为它确实从此属性隐式设置Content
(以及其他属性)。他们真的应该更新文档,因为“别名”实际上相当于使用TemplateBinding
。如果他们说明了这一点,甚至提到了TemplateBinding
,那就会更清楚了。您的代码示例完美地做到了这一点。太棒了! - Mark A. Donohoe