让我解释一下我的情况。
我有一个名为 Shape 的基类,以及几个具体的类,如 Triangle、Square 等。
我有几个数据模板。
我只构建一个对象。所以我不会使用 ItemControl 控件,我想使用像网格这样的普通面板,并显示相应的数据模板(在 DataContext 中有具体项目)..
做到这一点的唯一方法是使用 ItemsControl?或者还有另一种方法..因为我只使用一个项目而不是一个集合并显示正确的模板。
让我解释一下我的情况。
我有一个名为 Shape 的基类,以及几个具体的类,如 Triangle、Square 等。
我有几个数据模板。
我只构建一个对象。所以我不会使用 ItemControl 控件,我想使用像网格这样的普通面板,并显示相应的数据模板(在 DataContext 中有具体项目)..
做到这一点的唯一方法是使用 ItemsControl?或者还有另一种方法..因为我只使用一个项目而不是一个集合并显示正确的模板。
DataTemplates
不仅仅用于ItemsControls
它们用于告诉 WPF 如何在可视树中绘制任何对象。例如,如果您在 中粘贴一个User
类对象VisualTree
,aDataTemplate
可用于告诉 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>
如果要显示具有基于项目类型选择的数据模板的单个项目,则应使用ContentControl
或其任何派生类。