Благодаря публикации Вольфа Шмидта (MSFT) на форуме www.silverlight.net проблема была идентифицирована, объяснена и потенциально решена в соответствии с планом. По его словам, Silverlight 4 теперь будет более строго учитывать квазидинамическое поведение Silverlight 3 в отношении ControlTemplates, что приводит к ошибке в Silverlight 4, когда свойство TargetType для ControlTemplate не существует. Важно отметить, что когда TargetType не указан на ControlTemplate, по умолчанию используется TargetType = "Control".
Решение этой проблемы состоит в том, чтобы указать TargetType для ControlTemplate, чтобы разрешались свойства, используемые в привязке шаблона.
Вот обновленный стиль с TargetType, указанным для ControlTemplate:
<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>
Однако разработчикам было бы очень полезно, если бы IDE / intellisense мог убедиться, что свойство, указанное в TemplateBinding, действительно существует в заданном по умолчанию / указанном TargetType ControlTemplate.
Источник:
- обсуждение на форуме Silverlight .NET: (недостаточно репутации для публикации> 1 гиперссылки)
- Моя проблема MS Connect: https://connect.microsoft.com/VisualStudio/feedback/details/561183