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 une extensibilité pour l'implémentation XAML WPF se trouvaient 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 se trouvaient dans l'assembly WindowsBase.

Dans .NET Framework 4, il existe un nouvel System.Xaml espace de noms et un nouvel assembly System.Xaml. La plupart des types implémentés initialement pour XAML WPF sont maintenant fournis comme points ou services d'extensibilité pour les implémentations du langage XAML. En vue de les rendre disponibles pour des scénarios plus généraux, les types sont transférés de leur assembly WPF d'origine vers 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).

En ce qui concerne les types migrés, ils restent pour la plupart dans l'espace de noms System.Windows.Markup . Cela permettait en partie d'éviter d'interrompre le mappage des 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). Tous les types migrés vers System.Xaml, mais se trouvant déjà dans un assembly WPF, prennent en charge le transfert des types dans la version 4 de l'assembly WPF.

Types de prise en charge XAML du 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. Lorsque cela est possible, les infrastructures spécifiques ou le code utilisateur de l'infrastructure doivent également s'appuyer 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 fournissaient plusieurs services qui étaient disponibles pour MarkupExtension implémenter et TypeConverter implémenter des implémentations pour prendre en charge l’utilisation de type/propriété 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 l'interface IReceiveMarkupExtension doivent désormais utiliser les rappels avec attribut XamlSetMarkupExtensionAttribute . La classeAcceptedMarkupExtensionExpressionTypeAttribute est également signalée comme [Obsolete].

Fonctionnalités du langage XAML

Plusieurs fonctionnalités et composants du langage XAML pour WPF se trouvaient déjà dans l'assembly PresentationFramework. Ils ont été implémentés en tant que sous-classe MarkupExtension pour exposer les utilisations des extensions de balisage en XAML 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 une liste des classes de prise en charge des fonctionnalités XAML définies dans System.Xaml.

Fonctionnalité du langage XAML Utilisation
ArrayExtension <x:Array ...>
NullExtension {x:Null}
StaticExtension {x:Static ...}
TypeExtension {x:Type ...}

Bien que System.Xaml ne dispose pas nécessairement de classes de prise en charge spécifiques, la logique générale en matière de traitement des fonctionnalités du langage XAML se trouve désormais dans System.Xaml, ainsi que dans ses lecteurs et writers XAML implémentés. Par exemple, x:TypeArguments est un attribut traité par les lecteurs et les writers XAML des implémentations System.Xaml. Il peut être signalé dans le flux de nœud XAML, gère le contexte de schéma XAML par défaut (basé sur CLR), a une représentation système de type XAML, etc. 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 en chaîne, en particulier dans 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, wpF ValueSerializer était dans l’assembly 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 (service de prise en charge) et DateTimeValueSerializer (sous-classe spécifique) sont également migrés vers System.Xaml.

XAML WPF incluait plusieurs attributs qui peuvent être appliqués aux types CLR pour indiquer certains éléments concernant 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 conçu pour la prise en charge des outils et les 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 les opérations de base pour une portée de nom 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 System.Xaml se trouve dans l'espace de noms System.Xaml . En général, si vous utilisez des types WPF ou dérivez de types WPF, vous devez utiliser les implémentations WPF de XamlReader et XamlWriter , et non les implémentations System.Xaml. Pour plus d'informations, consultez la section Notes dans System.Windows.Markup.XamlReader et System.Windows.Markup.XamlWriter.

Si vous incluez des références aux assemblys WPF et System.Xaml, et si vous utilisez également des instructions include pour les espaces de noms System.Windows.Markup et System.Xaml , vous devrez peut-être qualifier pleinement les appels à ces API afin de résoudre les types sans ambiguïté.