2011-01-27 7 views
13

Tengo un DataTemplate en app.xaml que vincula una vista a un modelo de vista.datatemplate en app.xaml no está siendo recogido sin ningún estilo?

<Application.Resources> 
    <DataTemplate DataType="{x:Type vm:someviewmodeltype}"> 
     <vw:somevwcontrol /> 
    </DataTemplate> 
</Application.Resources> 

la plantilla anterior no se aplica si no hay estilos. En el momento en que puse un estilo, algo así como ...

<Application.Resources> 
    <DataTemplate DataType="{x:Type vm:someviewmodeltype}"> 
     <vw:somevwcontrol /> 
    </DataTemplate> 
    <Style TargetType="TextBlock"> 
     <Setter Property="FontSize" Value="20"></Setter> 
    </Style> 
</Application.Resources> 

DataTemplate es recogido y produce los resultados deseados ... No estoy seguro de qué está sucediendo allí ... puede alguien aclarar esto?

Gracias.

Respuesta

18

Respondió una pregunta similar here. La pregunta no es exactamente la misma, que uno contiene diccionarios fusionados que se saltan, pero es muy probable que se trate del mismo error.

Este es un error de optimización, consulte this link.

en la creación de cada objeto en XAML, si un estilo por defecto está presente (estilo es decir, w/a clave de Type) que estilo debe ser aplicada. Como puede imagine que hay varias optimizaciones de rendimiento para hacer que (implícita) busque un peso ligero como sea posible. Uno de ellos es que no miramos dentro de Diccionarios de recursos a menos que estén marcados como "que contienen los estilos predeterminados". Hay un error: si todos sus estilos predeterminados están anidados en diccionarios fusionados de tres niveles profundos (o más profundo), el diccionario superior no se marca por lo que la búsqueda se salta. La solución alternativa es poner un estilo predeterminado a algo, cualquier cosa, en el diccionario raíz .

Veo que ya ha encontrado la solución alternativa, simplemente agregue un estilo ficticio predeterminado en App.xaml. No tiene que tener ningún setter, etc., algo como esto también lo hará

<Application.Resources> 
    <DataTemplate DataType="{x:Type vm:someviewmodeltype}"> 
     <vw:somevwcontrol /> 
    </DataTemplate> 
    <Style TargetType="{x:Type Rectangle}" /> 
</Application.Resources> 
+0

Pasé un día entero buscando esto. Resuelto – JvdBerg

Cuestiones relacionadas