Types migrés de WPF vers System.Xaml
Dans .NET Framework version 3.5 et .NET Framework version 3.0, Windows Presentation Foundation (WPF) et Windows Workflow Foundation incluaient tous deux 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 plus, les types publics qui fournissaient une extensibilité pour le langage XAML Windows Workflow Foundation se trouvaient dans l'assembly System.Workflow.ComponentModel. Dans le .NET Framework version 4, certains types XAML sont migrés vers l'assembly System.Xaml. L'implémentation .NET Framework commune de services de langage XAML autorise de nombreux scénarios d'extensibilité XAML, initialement définis par l'implémentation XAML d'une infrastructure spécifique mais faisant désormais partie de la prise en charge du langage XAML du .NET Framework 4. Cette rubrique répertorie les types qui ont été migrés et traite des problèmes relatifs à la migration.
Cette rubrique comprend les sections suivantes.
- Assemblys et espaces de noms
- MarkupExtension
- Classes de services de prise en charge MarkupExtension
- Fonctionnalités des langages XAML
- ValueSerializer et classes de prise en charge
- Attributs XAML
- Classes diverses
- Classes XAML portant les noms partagés qui se trouvent dans WPF et System.Xaml
- Rubriques connexes
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 le langage XAML se trouvaient généralement dans l'espace de noms System.Windows.Markup. La plupart de ces types se trouvaient dans l'assembly WindowsBase.
Dans .NET Framework 4, un nouvel espace de noms System.Xaml et un nouvel assembly System.Xaml ont été créés. 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 d'autoriser les scénarios d'extensibilité XAML sans avoir à inclure les assemblys d'autres infrastructures (telles 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 sur la base de fichiers. Par conséquent, l'espace de noms System.Windows.Markup du .NET Framework 4 contient un mélange de types généraux de prises en charge du langage XAML (depuis l'assembly System.Xaml) et de types spécifiques à l'implémentation XAML WPF (depuis 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 prises en charge XAML du workflow
Windows Workflow Foundation fournissait également des types de prises en charge XAML, et dans de nombreux cas ils portaient les mêmes noms courts que leur équivalent WPF. Voici une liste de types de prises en charge XAML Windows Workflow Foundation :
Ces types de prises en charge se trouvent toujours dans les assemblys Windows Workflow Foundation du .NET Framework 4 et peuvent encore être utilisés pour des applications Windows Workflow Foundation spécifiques, mais ils ne doivent pas être référencés par des applications ou des infrastructures n'utilisant pas Windows Workflow Foundation.
MarkupExtension
Dans le .NET Framework 3.5 et le .NET Framework 3.0, la classe MarkupExtension pour WPF se trouvait dans l'assembly WindowsBase. Pour Windows Workflow Foundation, une classe parallèle, MarkupExtension, se trouvait dans l'assembly System.Workflow.ComponentModel. Dans le .NET Framework 4, la classe MarkupExtension est migrée vers l'assembly System.Xaml. Dans .NET Framework 4, MarkupExtension est prévu pour les scénarios d'extensibilité XAML qui utilisent les services XAML .NET Framework, et pas seulement pour ceux qui s'appuient sur des infrastructures 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, disponibles pour les implémenteurs de MarkupExtension et les implémentations TypeConverter, afin de prendre en charge l'utilisation des types et des propriétés en XAML. Ces services sont les suivants :
Remarque |
---|
L'interface IReceiveMarkupExtension est un autre service du .NET Framework 3.5 associé aux extensions du balisage. Cette interface IReceiveMarkupExtension n'a pas été migrée et est signalée comme [Obsolete] pour .NET Framework 4.Les scénarios qui utilisaient l'interface IReceiveMarkupExtension doivent désormais utiliser les rappels attribués à XamlSetMarkupExtensionAttribute.AcceptedMarkupExtensionExpressionTypeAttribute est également signalé comme [Obsolete]. |
Fonctionnalités des langages XAML
Plusieurs fonctionnalités et composants des langages 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 .NET Framework 4, ils se trouvent dans l'assembly System.Xaml afin que les projets n'incluant pas d'assemblys WPF puissent utiliser ces fonctionnalités au niveau du langage XAML. WPF utilise ces mêmes implémentations pour les applications du .NET Framework 4. Comme dans d'autres situations répertoriées dans cette rubrique, les types de prises 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 prises en charge des fonctionnalités XAML définies dans System.Xaml.
Fonctionnalité du langage XAML |
Utilisation |
---|---|
<x:Array ...> |
|
{x:Null} |
|
{x:Static ...} |
|
{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 et 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, pouvant être signalé dans le flux de nœud XAML, gérant le contexte de schéma XAML par défaut (basé sur CLR), ayant une représentation système de type XAML, etc. Par conséquent, la documentation de référence pour toutes les fonctionnalités au niveau de langage XAML constitue une sous-rubrique de Services XAML et de cette zone générale de la documentation .NET Framework, et ne fait donc pas partie de la documentation WPF comme sous-rubrique de Notions de base sur WPF (comme c'est toujours le cas dans les jeux de documentation 3.5).
ValueSerializer et classes de prise en charge
La classe ValueSerializer prend en charge la conversion des types en chaînes, 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, l'élément ValueSerializer pour WPF se trouvait dans l'assembly WindowsBase. Dans .NET Framework 4, la classe ValueSerializer se trouve dans System.Xaml et est destinée aux scénarios d'extensibilité XAML et pas uniquement à 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.
Attributs XAML
XAML WPF incluait plusieurs attributs qui pouvaient être appliqués aux types CLR pour indiquer certains éléments concernant leur comportement XAML. Voici une liste des attributs qui se trouvaient dans les assemblys WPF dans .NET Framework 3.5 et .NET Framework 3.0. Ces attributs ont été migrés vers System.Xaml dans .NET Framework 4.
Classes diverses
L'interface IComponentConnector se trouvait dans WindowsBase dans le .NET Framework 3.5 et le .NET Framework 3.0, mais elle se trouve dans System.Xaml dans le .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 se trouve dans System.Xaml dans .NET Framework 4. INameScope définit les opérations de base pour une portée de nom XAML.
Classes XAML portant les noms partagés qui se trouvent dans WPF et System.Xaml
Les classes suivantes se trouvent à la fois dans les assemblys WPF et dans l'assembly System.Xaml du .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érivant de types WPF, vous devez utiliser les implémentations WPF de XamlReader et de 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é.