Types migrés de WPF vers System.Xaml
Dans .NET Framework 3.5 et .NET Framework 3.0, Windows Presentation Foundation (WPF) et Windows Workflow Foundation incluaient une implémentation de langage XAML. La plupart des types publics qui fournissaient l’extensibilité pour l’implémentation XAML WPF existaient dans les assemblys WindowsBase, PresentationCore et PresentationFramework. De même, les types publics qui fournissaient l’extensibilité pour windows Workflow Foundation XAML existaient dans l’assembly System.Workflow.ComponentModel. Dans .NET Framework 4, certains types liés au code XAML ont été migrés vers l’assembly System.Xaml. Une implémentation courante du .NET Framework des services de langage XAML permet de nombreux scénarios d’extensibilité XAML qui ont été définis à l’origine par l’implémentation XAML d’un framework spécifique, mais qui font désormais partie de la prise en charge globale du langage XAML .NET Framework 4. Cet article répertorie les types qui ont été migrés et traite des problèmes liés à la migration.
Assemblys et espaces de noms
Dans .NET Framework 3.5 et .NET Framework 3.0, les types implémentés par WPF pour prendre en charge XAML se trouvaient généralement dans l’espace de noms System.Windows.Markup. La plupart de ces types étaient dans l’assembly WindowsBase.
Dans .NET Framework 4, il existe un nouvel espace de noms System.Xaml et un nouvel assembly System.Xaml. De nombreux types qui ont été initialement implémentés pour LE XAML WPF sont désormais fournis en tant que points d’extensibilité ou services pour n’importe quelle implémentation de XAML. Dans le cadre de leur mise à disposition pour des scénarios plus généraux, les types sont transférés de leur assembly WPF d’origine à l’assembly System.Xaml. Cela permet des scénarios d'extensibilité avec XAML, sans avoir à inclure les assemblies d’autres frameworks, par exemple WPF et Windows Workflow Foundation.
Pour les types migrés, la plupart des types restent dans l’espace de noms System.Windows.Markup. Cela avait pour but, en partie, d'éviter de casser les mappages d'espaces de noms CLR dans les implémentations existantes pour chaque fichier. Par conséquent, l’espace de noms System.Windows.Markup dans .NET Framework 4 contient un mélange de types généraux de prise en charge du langage XAML (à partir de l’assembly System.Xaml) et de types spécifiques à l’implémentation XAML WPF (à partir de WindowsBase et d’autres assemblys WPF). Tout type qui a été migré vers System.Xaml, mais qui existait précédemment dans un assembly WPF, prend en charge le transfert de type dans la version 4 de l’assembly WPF.
Types de prise en charge XAML de flux de travail
Windows Workflow Foundation a également fourni des types de prise en charge XAML et, dans de nombreux cas, ils avaient des noms courts identiques à un équivalent WPF. Voici une liste des types de prise en charge XAML de Windows Workflow Foundation :
Ces types de prise en charge existent toujours dans les assemblys Windows Workflow Foundation pour .NET Framework 4 et peuvent toujours être utilisés pour des applications Windows Workflow Foundation spécifiques ; Toutefois, elles ne doivent pas être référencées par des applications ou des frameworks qui n’utilisent pas Windows Workflow Foundation.
MarkupExtension
Dans .NET Framework 3.5 et .NET Framework 3.0, la classe MarkupExtension pour WPF était dans l’assembly WindowsBase. Une classe parallèle pour Windows Workflow Foundation, MarkupExtension, existait dans l’assembly System.Workflow.ComponentModel. Dans .NET Framework 4, la classe MarkupExtension est migrée vers l’assembly System.Xaml. Dans .NET Framework 4, MarkupExtension est destiné à tout scénario d’extensibilité XAML qui utilise les services XAML .NET, et non seulement pour ceux qui utilisent des frameworks spécifiques. Si possible, des frameworks spécifiques ou du code utilisateur dans le framework devraient également reposer sur la classe MarkupExtension pour l'extension XAML.
Classes de services de prise en charge MarkupExtension
.NET Framework 3.5 et .NET Framework 3.0 pour WPF offraient plusieurs services, disponibles pour les MarkupExtension implémenteurs et les TypeConverter implémentations, afin de prendre en charge l'utilisation des types et des propriétés dans XAML. Ces services sont les suivants :
Remarque
Un autre service de .NET Framework 3.5 lié aux extensions de balisage est l’interface IReceiveMarkupExtension. IReceiveMarkupExtension n’a pas été migré et est marqué [Obsolete]
pour .NET Framework 4. Les scénarios qui utilisaient auparavant IReceiveMarkupExtension devraient plutôt utiliser des rappels attribués à XamlSetMarkupExtensionAttribute. AcceptedMarkupExtensionExpressionTypeAttribute est également marqué [Obsolete]
.
Fonctionnalités du langage XAML
Plusieurs fonctionnalités et composants du langage XAML pour WPF existaient précédemment dans l’assembly PresentationFramework. Celles-ci ont été implémentées en tant que sous-classe MarkupExtension pour exposer les utilisations d’extension de balisage dans le balisage XAML. Dans .NET Framework 4, ceux-ci existent dans l’assembly System.Xaml afin que les projets qui n’incluent pas d’assemblys WPF puissent utiliser ces fonctionnalités au niveau du langage XAML. WPF utilise ces mêmes implémentations pour les applications .NET Framework 4. Comme avec d'autres situations répertoriées dans cette rubrique, les types de prise en charge se trouvent toujours dans l'espace de noms System.Windows.Markup afin d'éviter d'endommager les références précédentes.
Le tableau suivant contient la liste des classes de prise en charge des fonctionnalités XAML définies dans System.Xaml.
Fonctionnalité de langage XAML | Utilisation |
---|---|
ArrayExtension | <x:Array ...> |
NullExtension | {x:Null} |
StaticExtension | {x:Static ...} |
TypeExtension | {x:Type ...} |
Bien que System.Xaml n’ait peut-être pas de classes de prise en charge spécifiques, la logique générale pour le traitement des fonctionnalités de langage pour le langage XAML réside désormais dans System.Xaml et ses lecteurs XAML implémentés et les enregistreurs XAML. Par exemple, x:TypeArguments
est un attribut traité par les lecteurs XAML et les enregistreurs XAML à partir d’implémentations System.Xaml ; il peut être noté dans le flux de nœud XAML, a la gestion dans le contexte de schéma XAML par défaut (basé sur CLR), a une représentation de système de type XAML, et ainsi de suite. Pour plus d’informations sur la documentation de référence pour XAML, consultez services XAML .
ValueSerializer et classes de prise en charge
La classe ValueSerializer prend en charge la conversion de type en chaîne, en particulier pour les cas de sérialisation XAML où la sérialisation peut nécessiter plusieurs modes ou nœuds dans la sortie. Dans .NET Framework 3.5 et .NET Framework 3.0, le ValueSerializer pour WPF était dans l’assembly WindowsBase. Dans .NET Framework 4, la classe ValueSerializer se trouve dans System.Xaml et est destinée à tout scénario d’extensibilité XAML, et non seulement pour ceux qui s’appuient sur WPF. IValueSerializerContext (un service de prise en charge) et DateTimeValueSerializer (sous-classe spécifique) sont également migrés vers System.Xaml.
Attributs XAML
WPF XAML incluait plusieurs attributs qui peuvent être appliqués aux types CLR pour indiquer quelque chose sur leur comportement XAML. Voici une liste des attributs qui existaient dans les assemblys WPF dans .NET Framework 3.5 et .NET Framework 3.0. Ces attributs sont migrés vers System.Xaml dans .NET Framework 4.
Classes diverses
L’interface IComponentConnector existait dans WindowsBase dans .NET Framework 3.5 et .NET Framework 3.0, mais existe dans System.Xaml dans .NET Framework 4. IComponentConnector est principalement destiné à la prise en charge des outils et aux compilateurs de balisage XAML.
L’interface INameScope existait dans WindowsBase dans .NET Framework 3.5 et .NET Framework 3.0, mais existe dans System.Xaml dans .NET Framework 4. INameScope définit des opérations de base pour un namescope XAML.
Classes liées au code XAML avec des noms partagés qui existent dans WPF et System.Xaml
Les classes suivantes existent à la fois dans les assemblys WPF et l’assembly System.Xaml dans .NET Framework 4 :
XamlReader
XamlWriter
XamlParseException
L’implémentation WPF se trouve dans l’espace de noms System.Windows.Markup et l’assembly PresentationFramework. L’implémentation de System.Xaml se trouve dans l’espace de noms System.Xaml. Si vous utilisez des types WPF ou que vous dérivez de types WPF, vous devez généralement utiliser les implémentations WPF de XamlReader et de XamlWriter au lieu des implémentations System.Xaml. Pour plus d’informations, consultez Remarques dans System.Windows.Markup.XamlReader et System.Windows.Markup.XamlWriter.
Si vous incluez des références aux assemblys WPF et System.Xaml, et que vous utilisez également des instructions include
pour les espaces de noms System.Windows.Markup et System.Xaml, vous devrez peut-être qualifier entièrement les appels à ces API pour résoudre les types sans ambiguïté.
.NET Desktop feedback