数据模板只在ItemsControl控件中是必需的吗?

时间:2012-06-27 18:25:25

标签: c# wpf silverlight xaml datatemplate

让我向你解释一下我的情况。

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

我有几个数据模板。

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

执行此操作的唯一方法是使用ItemsControl?或者还有另一种方式......因为我只使用一个项目而不是一个集合并显示正确的模板。

2 个答案:

答案 0 :(得分:3)

DataTemplates的用法不仅仅是ItemsControls

它们用于告诉WPF如何在Visual Tree中绘制任何对象。例如,如果您在User中粘贴VisualTree类对象,则可以使用DataTemplate告诉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>

答案 1 :(得分:1)

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