在.NET / WP / WPF中,我希望创建我的第一个用户控件,它将使用DataTemplate呈现内容,并且想知道如何做到这一点。我是否需要使用内容演示者并将其传递给模板或什么?谢谢你的帮助!
答案 0 :(得分:3)
将模板化内容包含在其他固定内容中的基本策略(如UserControl
的XAML)是在包含控件上定义一组Content
属性(为DependencyProperties
)然后添加ContentPresenter
(带有适当的绑定)作为将注入内容的占位符。在框架中,您可以在HeaderedContentControl
中看到一个示例,其中包含一个普通的Content
属性集,还有一组并行的Header
属性,用作第二个内容
您可以在控件上定义的属性(因平台而异)是:
Content
ContentTemplate
ContentTemplateSelector
ContentStringFormat
用你的自定义名称替换每个中的“内容”。在你的情况下,你可能只有前两个。然后在UserControl
布局(实际上定义UserControl
的内容本身)中,只需放置ContentPresenter
并将其设置为使用自定义属性,控件本身为{{ 1}}(Binding Source
,ElementName
或将RelativeSource
设置在DataContext
本身的某处):
UserControl
在大多数情况下(但不是这里) <ContentPresenter Content="{Binding ElementName=MyControl, Path=MyExtraContent}"
ContentTemplate="{Binding ElementName=MyControl, Path=MyExtraContentTemplate}" />
在ContentPresenter
中使用,您可以使用内置的快捷方式为您绑定所有内容属性:
ControlTemplate
您可以使用<ContentPresenter ContentSource="MyExtraContent"/>
获得相同的效果,但它会为您的可视树添加额外的元素,因为它基本上只是包含ContentControl
的{{1}},它会传递所有属性。它允许您添加一些视觉差异,例如ContentTemplate
或ContentPresenter
,或者添加整个自定义模板,但在这种情况下,只需添加其他控件{{{{{{ 1}}。