2010-05-24 11 views
5

Tengo un error al intentar actualizar nuestro gran proyecto a SL4. No escribí el tema original y el conocimiento de mi tema no es excelente. En mi aplicación demo que tienen una etiqueta y una LabelHeader (que he creado y es simplemente una clase derivada de la etiqueta con DefaultStyleKey = typeof (LabelHeader);
estoy Styling la LabelHeader así:Error implícito de tema: no se encontró la propiedad 'Contenido' en el tipo 'System.Windows.Controles.Control'

<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> 

esto funciona en SL3 pero en SL4 me sale:

de error: no controlada error en la aplicación Silverlight Código: 2500
Categoría: ParserError
mensaje: la propiedad 'content' no se encontró en el tipo 'System.Windows.Controls .Control '.
del archivo:
Línea: 9
Posición: 168

Si cambio de esto: contenido = "{TemplateBinding contenido}" a contenido = "XXX" entonces no hay ningún error, pero, por supuesto , Obtengo XXX en mi etiqueta en lugar del contenido que configuré en XAML en la página

¿Alguna idea de cómo puedo hacer que esto funcione?

proyecto de demostración aquí:

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

(Disculpas por el traspaso, que han conseguido hasta el momento no hay respuestas aquí: http://forums.silverlight.net/forums/p/183380/415930.aspx#415930)

EDITAR La respuesta siempre parece que va a trabajar. Se ha abierto un problema para este problema aquí: https://connect.microsoft.com/VisualStudio/feedback/details/561183

¡vote si cree que es importante!

Respuesta

6

Gracias a la publicación de Wolf Schmidt (MSFT) en el foro www.silverlight.net, el problema ha sido identificado, explicado y potencialmente resuelto según lo diseñado. Según él, Silverlight 4 ahora considerará el comportamiento cuasi dinámico de Silverlight 3 con respecto a ControlTemplates de una manera más estricta, lo que resulta en un error en Silverlight 4 cuando la propiedad no existe para TargetType de ControlTemplate. Lo que es importante tener en cuenta es que cuando TargetType no se especifica en ControlTemplate, se establece como TargetType = "Control".

La resolución del problema consiste en especificar un TargetType para ControlTemplate de manera que se resuelvan las propiedades utilizadas en el enlace de la plantilla.

Aquí es un estilo actualizado con TargetType especificado para el 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> 

Sería sin embargo ser muy útil para los desarrolladores si el IDE/intelisense pudo verificar que la propiedad se especifica en la TemplateBinding existe realmente en el default/TargetType especificado de ControlTemplate.

obtienen de: - discusiones nuestro foro Silverlight .NET: (no lo suficiente reputación para enviar> 1 hipervínculo) - mi el tema MS conexion: https://connect.microsoft.com/VisualStudio/feedback/details/561183

+0

La discusión de Silvelight.Net de la que habla Jaans está aquí: http://forums.silverlight.net/forums/p/183380/415930.aspx – Mark

4

Hay un error en algunas situaciones en Silverlight 4 cuando se presenta esta excepción. Es específico de la propiedad de contenido.

Parece que la corrección temporal es utilizar un enlace normal para la propiedad de contenido.

Content="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=Content}" 

Aunque todavía no he probado esta solución.

+0

Gracias, voy a darle una oportunidad – Mark

+0

miradas como esto funciona, gracias! Se ha abierto un problema para este problema aquí: https://connect.microsoft.com/VisualStudio/feedback/details/561183 vote si cree que esto es importante – Mark

Cuestiones relacionadas