Est-il vrai que wpf-objets qui sont freezable sont automatiquement gelés dans tous les cas s'ils sont générés par un DataTemplate, un ControlTemplate ou un style?Geler automatiquement les objets wpf construits à partir de modèles
Répondre
J'ai joué un peu autour avec des brosses dans mon VisualTree-Analyzer pour voir comment fonctionne le gel automatique. Voici le résultat de mes tests:
Tous les pinceaux liés à ControlTemplates, DataTemplates ou Styles ont été gelés, que le pinceau déclarant dans le modèle ou dans le style ait été gelé.
Pour obtenir cela, j'ai vérifié l'arbre résultant visuel des modèles et des styles suivants:
<DataTemplate x:Key="Test_DataTemplate">
<Grid>
<!-- Explicit creation to ensure Brush is !IsFrozen through the converter-->
<Grid.Background>
<SolidColorBrush Color="Red"/>
</Grid.Background>
<TextBlock Text="{Binding}"/>
</Grid>
</DataTemplate>
<ControlTemplate x:Key="Test_ControlTemplate" TargetType="{x:Type ContentControl}">
<Border >
<Border.Background>
<SolidColorBrush Color="Green" />
</Border.Background>
<ContentPresenter />
</Border>
</ControlTemplate/>
<Style x:Key="Test_Style" TargetType="TextBlock">
<Setter Property="Background" >
<Setter.Value>
<SolidColorBrush Color="Yellow" />
</Setter.Value>
</Setter>
</Style>
<TextBlock >
<TextBlock.Style>
<Style TargetType="TextBlock">
<Setter Property="Background" >
<Setter.Value>
<SolidColorBrush Color="Violet" />
</Setter.Value>
</Setter>
</Style>
</TextBlock.Style>
</TextBlock>
Comme nous l'avons fait remarquer, les pinceaux dans l'arbre visuel ont été gelés toujours.
En outre, le pinceau du setter dans le style du test de style a été gelé, si le style a été utilisé au moins une fois. Je pense que cette "restriction ponctuelle" est due au fait que WPF doit tester si aucune animation ne touche le pinceau et cela au moment de la première utilisation. Mais ce n'est que spéculatif. Je n'ai fait aucun test avec animation.
D'après les observations de personnes âgées à ce sujet, je pense que ma question initiale peut être répondu par oui. Un tel comportement me semble aussi logique. Mais il est clair que si peu de tests avec un type de ressource peuvent aussi conduire dans une direction totalement fausse. Malheureusement, il n'y a pas beaucoup d'informations sur ce sujet disponible. Si quelqu'un a de bons liens, ou si j'ai fait une erreur évidente dans mes tests simples, s'il vous plaît laissez-moi un commentaire.
Non, je ne pense pas que ce soit juste. Vous devez aussi geler explicitement ces objets dans XAML. Vérifiez ces liens pour plus de détails sur la façon de le faire en XAML -
http://msdn.microsoft.com/en-us/library/ms750509.aspx
How can WPF objects deriving from Freezable be frozen in XAML?
La question/autre réponse ne concerne généralement pas les freezables dans XAML, il fait spécifiquement référence aux modèles et aux styles - auquel cas il s'agit d'une copie de l'objet original qui nous intéresse. –
- 1. Remplir automatiquement les objets à partir de HTTPRequest
- 2. Les modèles Word sont automatiquement renseignés à partir des champs de liste d'une liste personnalisée SharePoint?
- 3. Django/Récupérer automatiquement les noms des modèles
- 4. Comment utiliser les objets dans les modèles de manière sécurisée
- 5. Objets de valeur générés automatiquement
- 6. modèles django objets filtrer
- 7. Objets partiellement construits dans Singleton non thread-safe
- 8. C# - Modèles d'impression à partir d'objets
- 9. Wpf galerie de modèles
- 10. WPF ListView ne pas afficher les modèles
- 11. C# ITypeResolutionService pour les types construits
- 12. Possible de geler des colonnes dans un ListFlow/GridView WPF?
- 13. données supplémentaires sur les objets dans les modèles de django
- 14. run t4 automatiquement des modèles
- 15. Relations entre modèles dans NSManagedObjectModel à partir de modèles fusionnés?
- 16. Comment geler/bloquer les colonnes?
- 17. Erreur de compilation: Les paramètres de fonction utilisant les références d'objet sont confondus par les objets construits
- 18. WPF InotifyPropertyChanged et voir les modèles
- 19. Reliure En liaison avec les modèles (WPF)
- 20. Enregistrement des objets modèles liés
- 21. Javascript choisir automatiquement les mots-clés à partir de HTML
- 22. Comment créer un objet formulaire à partir de 2 objets modèles différents dans Django?
- 23. WPF: TreeView et les modèles imbriqués
- 24. CoreData: migration à partir de 2 modèles
- 25. Génère automatiquement DBML à partir d'entités?
- 26. Moteurs construits sur pygame
- 27. wpf treeview n'affiche pas les objets enfants
- 28. Obtention d'éléments de modèle WPF à partir des modèles de contrôle et de données
- 29. WPF Popup fermer automatiquement
- 30. Modèles lisses dans Wpf
Cela peut également dépendre de la version du framework .Net utilisée par votre application. Nous avons tenté de mettre à niveau une application WPF de la version 3.5 à la version 4.0 et rencontré une exception XamlParseException avec un message indiquant que 'doit avoir IsFrozen défini sur false pour modifier'. Nous n'avons jamais explicitement appelé la méthode Freeze() sur un objet. –