Partager via


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 System.Windows.Markup de noms. La plupart de ces types étaient dans l’assembly WindowsBase.

Dans .NET Framework 4, il existe un nouvel System.Xaml espace de noms 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 aux scénarios d’extensibilité XAML sans avoir à inclure les assemblys d’autres frameworks (tels que WPF et Windows Workflow Foundation).

Pour les types migrés, la plupart des types restent dans l’espace System.Windows.Markup de noms. Cela a été partiellement pour éviter d’interrompre les mappages d’espaces de noms CLR dans les implémentations existantes par fichier. Par conséquent, l’espace System.Windows.Markup de noms 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 MarkupExtension classe pour WPF était dans l’assembly WindowsBase. Une classe parallèle pour Windows Workflow Foundation, MarkupExtensionexistait dans l’assembly System.Workflow.ComponentModel. Dans .NET Framework 4, la MarkupExtension classe 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 s'appuyer sur la classe MarkupExtension pour l'extension XAML.

MarkupExtension prenant en charge les classes de services

.NET Framework 3.5 et .NET Framework 3.0 pour WPF fournissaient plusieurs services qui étaient disponibles pour les implémenteurs et les implémentations afin de supporter l'utilisation des types/propriétés en 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 doivent désormais utiliser XamlSetMarkupExtensionAttribute avec des callbacks attribués. 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 MarkupExtension sous-classe 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 dans les autres cas répertoriés dans cette rubrique, les types de support continuent d’exister dans le namespace System.Windows.Markup pour éviter de casser 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 il s’agit d’un attribut qui est 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 une 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 les services XAML.

ValueSerializer et classes de prise en charge

La classe ValueSerializer prend en charge la conversion de type vers une chaîne, notamment dans les cas de sérialisation XAML où cela requiert souvent plusieurs modes ou nœuds dans la sortie. Dans .NET Framework 3.5 et .NET Framework 3.0, la balise ValueSerializer pour WPF était dans l’assemblage WindowsBase. Dans .NET Framework 4, la ValueSerializer classe se trouve dans System.Xaml et est destinée à tout scénario d’extensibilité XAML, pas seulement pour ceux qui s’appuient sur WPF. IValueSerializerContext (un service de prise en charge) et DateTimeValueSerializer (une sous-classe spécifique) sont également migrés vers System.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.

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'assemblage PresentationFramework. L’implémentation de System.Xaml se trouve dans l’espace System.Xaml de noms. Si vous utilisez des types WPF ou si vous dérivez de types WPF, vous devez généralement utiliser les implémentations de WPF de XamlReader et XamlWriter au lieu des implémentations de 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 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 afin de résoudre les types sans ambiguïté.