让我向你解释一下我的情况。
我有一个名为Shape的基类,以及一些具体的类,如Triangle,Square等。
我有几个数据模板。
我正在构建一个对象。所以我不会使用ItemControl控件,我想使用像网格一样的普通面板,并显示相应的数据模板(在DataContext中有具体的项目)..
执行此操作的唯一方法是使用ItemsControl?或者还有另一种方式......因为我只使用一个项目而不是一个集合并显示正确的模板。
答案 0 :(得分:3)
DataTemplates
的用法不仅仅是ItemsControls
它们用于告诉WPF如何在Visual Tree中绘制任何对象。例如,如果您在User
中粘贴VisualTree
类对象,则可以使用DataTemplate
告诉WPF如何绘制User
对象
它们最常用于具有ItemsSource
或Content
属性的控件中,因为这些是将数据对象插入VisualTree
的最常用方法。
在您只想将一个数据项插入VisualTree的特定情况下,我建议ContentControl
<ContentControl Content="{Binding MyDataObject}" />
要告诉WPF如何绘制MyDataObject
,您可以使用ContentTemplate
属性并将其设置为DataTemplate
<ContentControl Content="{Binding MyDataObject}"
ContentTemplate="{StaticResource MyDataTemplate}" />
或定义一个隐式DataTemplate
,告诉WPF使用特定模板绘制特定类型的任何对象。
<DataTemplate DataType="{x:Type local:MyDataObject}">
<!-- Tell WPF how to draw MyDataObject here -->
</DataTemplate>
答案 1 :(得分:1)
如果要显示具有根据项目类型选择的数据模板的单个项目,则应使用ContentControl
或其任何派生类。