为什么我不能在样式中设置数据模板,但我可以在控件模板中?

时间:2012-01-25 23:06:07

标签: wpf styles datatemplate controltemplate setter

为什么这不起作用:

 <Style TargetType="s:Substance">
    <Setter Property="Template">
        <Setter.Value>
            <DataTemplate>
                <StackPanel>
                    <TextBlock Text="{TemplateBinding Name}"/>
                    <TextBox Text="{TemplateBinding Count}"/>
                </StackPanel>
            </DataTemplate>
        </Setter.Value>
    </Setter>
</Style>

如果切换到ControlTemplate它可以正常工作,但我需要一个数据模板。另外,如果我将Template替换为DataTemplate,则无法识别该属性。有谁知道发生了什么?谢谢。

注意:物质来自FrameworkElement。它不是一种控制。

1 个答案:

答案 0 :(得分:4)

您似乎不知道自己在做什么,Template期望ControlTemplate,此属性设置控件本身的模板,而不是其数据。

您的Substance控件是否还有任何需要DataTemplate的属性?例如ContentTemplate(如果是ContentControl)或ItemTemplate(如果是ItemsControl)?

编辑:您可能只想这样做:

<Some.Resources>
    <DataTemplate DataType="{x:Type s:Substance}"> <!-- The use of x:Type is important! -->
        <StackPanel>
            <TextBlock Text="{Binding Name}"/>
            <TextBox Text="{Binding Count}"/>
        </StackPanel>
    </DataTemplate>
</Some.Resources>

Substance定义数据模板;无论Substance被添加为内容或项目,都会自动应用该数据模板。