在UserControl中使用DataTemplates

时间:2012-01-07 14:41:51

标签: wpf datatemplate

我有一个UserControl,它成为XPS报告中的一个页面。页面的一部分是从List填充的表。我为表的每一行创建了一个DataTemplate。但是,当我将模板分配给ListView或ItemsControl时,我收到以下错误:

错误2“System.Windows.DataTemplate”类型的对象无法应用于需要“System.Windows.Controls.ControlTemplate”类型的属性。

我在一个Window中成功使用过这个,在UserControl中可以做同样的事吗?

所以在我的UserControl.Resources中我有以下数据模板

<DataTemplate x:Key="StiffenerTemplate">
        <Grid>
            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="50" />
                <ColumnDefinition Width="*" />
                <ColumnDefinition Width="*" />
                <ColumnDefinition Width="*" />
                <ColumnDefinition Width="*" />
                <ColumnDefinition Width="*" />
            </Grid.ColumnDefinitions>
            <TextBlock Grid.Column="0" Text="{Binding Path=Spacing}" />
            <TextBlock Grid.Column="1" Text="{Binding Path=Stiffener.Name}" />
            <TextBlock Grid.Column="2" Text="{Binding Path=XLeft}" />
            <TextBlock Grid.Column="3" Text="{Binding Path=XRight}" />
            <TextBlock Grid.Column="4" Text="{Binding Path=XLeft}" />
            <TextBlock Grid.Column="5" Text="{Binding Path=XRight}" />
        </Grid>
    </DataTemplate>

并且在控件的主网格中有

<ItemsControl ItemsSource="{Binding Path=WebStiffeners}" 
                          Template="{StaticResource StiffenerTemplate}"/>

1 个答案:

答案 0 :(得分:2)

您需要使用ItemTemplate代替模板:

<ItemsControl ItemsSource="{Binding Path=WebStiffeners}" 
                          ItemTemplate="{StaticResource StiffenerTemplate}"/>

来自MSDN ItemsControl

  

ItemTemplate 获取或设置用于显示每个项目的DataTemplate。

     

模板获取或设置ControlTemplate。定义Control的外观的模板。