隐式主题错误:在"System.Windows.Controls.Control"类型中找不到属性"Content"

Mar*_*ark 5 silverlight themes silverlight-4.0

尝试将我们的大型项目升级到SL4时出错.我没有写原始主题,我的主题知识不是很好.在我的演示应用程序我有一个标签和一个LabelHeader(我已经创建并从标签只是一个派生类与DefaultStyleKey = typeof运算(LabelHeader);
我的造型像这样LabelHeader:

 <Style TargetType="themeControls:LabelHeader">
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate>
                <DataInput:Label 
                    FontSize="{TemplateBinding FontSize}" 
                    FontFamily="{TemplateBinding FontFamily}" 
                    Foreground="{TemplateBinding Foreground}" 
                    Content="{TemplateBinding  Content}"/>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
    <Setter Property="FontFamily" Value="Tahoma"/>
    <Setter Property="FontSize" Value="20"/>
    <Setter Property="Foreground" Value="Red"/>
</Style>
Run Code Online (Sandbox Code Playgroud)

这适用于SL3但在SL4中我得到:

错误:Silverlight应用程序代码中的未处理错误:2500
类别:ParserError
消息:在"System.Windows.Controls.Control"类型中找不到属性"Content".
文件:
行:9
位置:168

如果我改变了:CONTENT ="{TemplateBinding内容}",以内容="XXX"那就没有错误,但是,当然,我在标签,而不是我在XAML设置页面上的内容让XXX

我有什么想法可以让这个工作吗?

演示项目在这里:

http://walkersretreat.co.nz/files/ThemeIssue.zip

(道歉转贴,我已经这么远在这里没有答案:http://forums.silverlight.net/forums/p/183380/415930.aspx#415930)

编辑提供的答案看起来会起作用.此问题已在此处打开一个问题:https: //connect.microsoft.com/VisualStudio/feedback/details/561183

如果您认为这很重要,请投票!

Jaa*_*ans 6

感谢Wolf Schmidt(MSFT)在www.silverlight.net论坛上的发布,该问题已经被识别,解释并可能按照设计解决.据他介绍,Silverlight 4现在将以更严格的方式考虑Silverlight 3关于ControlTemplates的准动态行为,当ControlTemplate的TargetType不存在属性时,会导致Silverlight 4出错.需要注意的重要一点是,当ControlTemplate中未指定TargetType时,它默认为TargetType ="Control".

该问题的解决方案是为ControlTemplate指定TargetType,以便模板绑定中使用的属性将解析.

这是一个更新的样式,其中为ControlTemplate指定了TargetType:

<Style x:Key="LabelHeader" TargetType="controls:Label">
    <Setter Property="Margin" Value="0" />
    <Setter Property="Opacity" Value=".6" />
    <Setter Property="VerticalAlignment" Value="Stretch" />
    <Setter Property="VerticalContentAlignment" Value="Center" />
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="controls:Label">
                <Border BorderBrush="#CCCCCCCC" BorderThickness=".5" Background="#CCEFEFEF">
                    <ContentPresenter VerticalAlignment="{TemplateBinding VerticalContentAlignment}" Margin="2" Content="{TemplateBinding Content}"/>
                </Border>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>
Run Code Online (Sandbox Code Playgroud)

但是,如果IDE/intellisense可以验证TemplateBinding中指定的属性实际存在于ControlTemplate的默认/指定TargetType上,那么它对开发人员非常有用.

来自: - 我们关于Silverlight .NET的论坛讨论:(没有足够的声誉发布> 1个超链接) - 我的MS Connect问题:https://connect.microsoft.com/VisualStudio/feedback/details/561183