1

让我解释一下我的情况。

我有一个名为 Shape 的基类,以及几个具体的类,如 Triangle、Square 等。

我有几个数据模板。

我只构建一个对象。所以我不会使用 ItemControl 控件,我想使用像网格这样的普通面板,并显示相应的数据模板(在 DataContext 中有具体项目)..

做到这一点的唯一方法是使用 ItemsControl?或者还有另一种方法..因为我只使用一个项目而不是一个集合并显示正确的模板。

4

2 回答 2

3

DataTemplates不仅仅用于ItemsControls

它们用于告诉 WPF 如何在可视树中绘制任何对象。例如,如果您在 中粘贴一个User类对象VisualTree,aDataTemplate可用于告诉 WPF 如何绘制该User对象

它们最常用于具有ItemsSourceContent属性的控件中,因为这些是将数据对象插入到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>
于 2012-06-27T18:37:28.683 回答
1

如果要显示具有基于项目类型选择的数据模板的单个项目,则应使用ContentControl或其任何派生类。

于 2012-06-27T18:37:02.607 回答