Question

J'ai un DataTemplate dans app.xaml qui se fixe en vue d'une viewmodel.

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

le modèle ci-dessus ne soit pas appliqué s'il n'y a pas de styles. Au moment où je mets un style, quelque chose comme ...

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

DataTemplate est ramassé et produit les résultats escomptés ... Je ne sais pas ce qu'il se passe là-bas ... quelqu'un pourrait clarifier cela?

Merci.

Était-ce utile?

La solution

répondu à une question similaire ici . La question est pas exactement le même, que l'on contenait des dictionnaires fusionnés sautés, mais il est très probablement le même bug.

Ceci est un bug d'optimisation, voir ce lien .

Sur la création de tous les objets XAML, si un style par défaut est présent (À savoir le style w / une clé de Type) qui le style doit être appliqué. Comme tu peux imaginer il y a plusieurs performances optimisations pour faire que (implicite) rechercher un poids plus léger possible. Une d'entre eux est que nous ne regardons pas à l'intérieur Dictionnaires de ressources à moins qu'ils ne sont marqué comme « contenant par défaut Modes". Il y a un bug: si tous vos styles par défaut sont imbriquées dans la fusion dictionnaires trois niveaux de profondeur (ou plus profond) le dictionnaire supérieur ne peut pas se trouve en position de sorte que la recherche, il saute. Le tour de travail est de mettre un défaut Style à quelque chose, quoi que ce soit, dans le racine dictionnaire.

Je vois que vous avez déjà trouvé la solution de contournement et, ajoutez simplement un style factice par défaut dans App.xaml. Il ne doit pas avoir de setters etc, quelque chose comme ça fera aussi bien

<Application.Resources>
    <DataTemplate DataType="{x:Type vm:someviewmodeltype}">
        <vw:somevwcontrol />
    </DataTemplate>
    <Style TargetType="{x:Type Rectangle}" /> 
</Application.Resources>
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top