ContentPresenter.ContentSource与内容

mic*_*ael 13 wpf xaml contentpresenter controltemplate

基本上,我不明白这里的真正区别是什么:

TabItem的Microsoft代码使用:

<ContentPresenter ContentSource="Header" ... />
Run Code Online (Sandbox Code Playgroud)

那么,何时使用该Content属性而不是(或除此之外)ContentSource

H.B*_*.B. 16

仅当ContentPresenter位于模板中时,才应使用此属性.当模板包含ContentSource设置为"Abc"的ContentPresenter时,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" />
Run Code Online (Sandbox Code Playgroud)

执行以下初始化.

<ContentPresenter Content="{TemplateBinding Header}"
                  ContentTemplate="{TemplateBinding HeaderTemplate}"
                  ContentTemplateSelector="{TemplateBinding HeaderTemplateSelector}"
                  ContentStringFormat="{TemplateBinding HeaderStringFormat}" />
Run Code Online (Sandbox Code Playgroud)

仅当模板化控件上存在依赖属性时,它才会分别为每个属性执行此操作.