Condividi tramite


Tipi migrati da WPF a System.Xaml

In .NET Framework versione 3.5 e .NET Framework versione 3.0, sia Windows Presentation Foundation (WPF) che Windows Workflow Foundation disponevano di un'implementazione del linguaggio XAML. Molti dei tipi pubblici che fornivano l'estensibilità per l'implementazione XAML di WPF erano inclusi negli assembly WindowsBase, PresentationCore e PresentationFramework. In modo analogo, i tipi pubblici che fornivano l'estensibilità di XAML per Windows Workflow Foundation erano inclusi nell'assembly System.Workflow.ComponentModel. In.NET Framework versione 4 è stata eseguita la migrazione di alcuni tipi correlati a XAML nell'assembly System.Xaml. Un'implementazione .NET Framework comune dei servizi del linguaggio XAML apre molti scenari di estensibilità di XAML definiti in origine dall'implementazione XAML di un framework specifico ma che ora fanno parte del supporto del linguaggio XAML di .NET Framework 4 complessivo. In questo argomento sono elencati i tipi di cui è stata eseguita la migrazione e vengono illustrati i problemi correlati alla migrazione.

Nel presente argomento sono contenute le seguenti sezioni.

  • Assembly e spazi dei nomi
  • MarkupExtension
  • MarkupExtension con supporto di classi del servizio
  • Funzionalità del linguaggio XAML
  • ValueSerializer e classi di supporto
  • Attributi correlati a XAML
  • Classi di vario tipo
  • Classi correlate a XAML con nomi condivisi incluse in WPF e System.Xaml
  • Argomenti correlati

Assembly e spazi dei nomi

In .NET Framework 3.5 e .NET Framework 3.0 i tipi implementati da WPF per il supporto di XAML erano in genere inclusi nello spazio dei nomi System.Windows.Markup. La maggior parte di questi tipi era inclusa nell'assembly WindowsBase.

In .NET Framework 4 è stato introdotto un nuovo spazio dei nomi System.Xaml e un nuovo assembly System.Xaml. Molti dei tipi implementati in origine per XAML di WPF vengono ora forniti come punti di estensibilità o servizi per qualsiasi implementazione di XAML. Nell'ambito della scelta di renderli disponibili per scenari più generali, i tipi sono stati inoltrati dall'assembly WPF originale all'assembly System.Xaml. In questo modo vengono abilitati scenari di estensibilità di XAML senza che sia necessario includere assembly di altri framework (ad esempio WPF e Windows Workflow Foundation).

Per quanto riguarda i tipi migrati, la maggior parte rimane nello spazio dei nomi System.Windows.Markup. Questa scelta deriva parzialmente dalla necessità di evitare l'interruzione dei mapping degli spazi dei nomi CLR nelle implementazioni esistenti su base file. Di conseguenza, lo spazio dei nomi System.Windows.Markup in .NET Framework 4 contiene una combinazione di tipi di supporto del linguaggio XAML generali (provenienti dall'assembly System.Xaml) e di tipi specifici dell'implementazione XAML di WPF (provenienti da WindowsBase e altri assembly WPF). Per qualsiasi tipo di cui è stata eseguita la migrazione a System.Xaml e che in precedenza era incluso in un assembly WPF è disponibile il supporto per l'inoltro dei tipi nella versione 4 dell'assembly WPF.

Tipi di supporto XAML del flusso di lavoro

Windows Workflow Foundation venivano inoltre forniti tipi di supporto XAML e in molti casi questi disponevano di nomi brevi identici a tipi equivalenti in WPF. Di seguito è riportato un elenco dei tipi di supporto XAML di Windows Workflow Foundation:

Questi tipi di supporto sono ancora inclusi negli assembly Windows Workflow Foundation per .NET Framework 4 e possono essere ancora utilizzati per le applicazioni Windows Workflow Foundation specifiche, tuttavia non è consigliabile fare riferimento a questi tipi da applicazioni o framework che non utilizzano Windows Workflow Foundation.

MarkupExtension

In .NET Framework 3.5 e .NET Framework 3.0 la classe MarkupExtension per WPF era inclusa nell'assembly WindowsBase. Una classe parallela per Windows Workflow Foundation, MarkupExtension era presente nell'assembly System.Workflow.ComponentModel. In the .NET Framework 4 è stata eseguita la migrazione della classe MarkupExtension all'assembly System.Xaml. In .NET Framework 4MarkupExtension è destinato a qualsiasi scenario di estensibilità XAML in cui si utilizzano i servizi XAML di .NET Framework, non solo a quelli basati su framework specifici. Quando possibile, framework specifici o codice utente nel framework devono essere basati anche sulla classe MarkupExtension per l'estensione XAML.

MarkupExtension con supporto di classi del servizio

In .NET Framework 3.5 e .NET Framework 3.0 per WPF venivano forniti diversi servizi disponibili agli implementatori di MarkupExtension e alle implementazioni di TypeConverter per supportare l'utilizzo di tipi/proprietà in XAML. Questi servizi sono i seguenti:

NotaNota

Un altro servizio di .NET Framework 3.5 correlato alle estensioni di markup è l'interfaccia IReceiveMarkupExtension. Di IReceiveMarkupExtension non è stata eseguita la migrazione ed è contrassegnato con [Obsolete] per .NET Framework 4.Negli scenari in cui precedenza veniva utilizzato IReceiveMarkupExtension, è ora necessario utilizzare callback con attributi XamlSetMarkupExtensionAttribute.Anche AcceptedMarkupExtensionExpressionTypeAttribute è contrassegnato con [Obsolete].

Funzionalità del linguaggio XAML

Diversi componenti e funzionalità del linguaggio XAML per WPF erano in precedenza inclusi nell'assembly PresentationFramework. Questi venivamo implementati come una sottoclasse MarkupExtension per esporre gli utilizzi delle estensioni di markup nel markup XAML. In .NET Framework 4 questi componenti e funzionalità sono presenti nell'assembly System.Xaml, in modo che i progetti che non includono assembly WPF possano utilizzare tali funzionalità a livello di linguaggio XAML. In WPF vengono utilizzate queste stesse implementazioni per le applicazioni .NET Framework 4. Come per gli altri casi elencati in questo argomento, i tipi di supporto continuano a esistere nello spazio dei nomi System.Windows.Markup per evitare l'interruzione di riferimenti precedenti.

Nella tabella seguente è riportato un elenco delle classi di supporto delle funzionalità del linguaggio XAML definite in System.Xaml:

Funzionalità del linguaggio XAML

Utilizzo

ArrayExtension

<x:Array ...>

NullExtension

{x:Null}

StaticExtension

{x:Static ...}

TypeExtension

{x:Type ...}

Benché in System.Xaml possano non essere presenti classi di supporto specifiche, la logica generale per l'elaborazione delle funzionalità del linguaggio per XAML si trova ora in System.Xaml e nei relativi reader XAML e writer XAML implementati. Ad esempio, x:TypeArguments è un attributo elaborato da reader XAML e writer XAML delle implementazioni di System.Xaml, può essere indicato nel flusso del nodo XAML, viene gestito nel contesto dello schema XAML predefinito (basato su CLR), dispone di una rappresentazione del sistema di tipi di XAML e così via. Di conseguenza, la documentazione di riferimento per tutte le funzionalità a livello di linguaggio XAML è inclusa come argomento secondario per Servizi XAML e per l'area generale specifica del set di documentazione .NET Framework, anziché far parte del set di documentazione WPF come argomento secondario di WPF Fundamentals, come accade ancora nei set di documentazione 3.5.

ValueSerializer e classi di supporto

La classe ValueSerializer supporta la conversione di tipi in una stringa, in particolare per i casi di serializzazione di XAML in cui per la serializzazione possono essere necessari più modalità o nodi nell'output. In .NET Framework 3.5 e .NET Framework 3.0 la classe ValueSerializer per WPF era inclusa nell'assembly WindowsBase. In .NET Framework 4 la classe ValueSerializer è in System.Xaml ed è destinata a qualsiasi scenario di estensibilità XAML, non solo a quelli basati su WPF. Anche gli oggetti IValueSerializerContext (servizio di supporto) e DateTimeValueSerializer (sottoclasse specifica) vengono migrati a System.Xaml.

Attributi correlati a XAML

In XAML per WPF erano inclusi molti attributi che potevano essere applicati a tipi CLR per fornire indicazioni sul relativo comportamento XAML. Di seguito viene fornito un elenco degli attributi presenti negli assembly WPF in .NET Framework 3.5 e .NET Framework 3.0. Questi attributi vengono migrati a System.Xaml in .NET Framework 4.

Classi di vario tipo

L'interfaccia IComponentConnector era inclusa in WindowsBase in .NET Framework 3.5 e .NET Framework 3.0, ma è presente in System.Xaml in .NET Framework 4. La classe IComponentConnector è destinata principalmente a strumenti di supporto e compilatori di markup XAML.

L'interfaccia INameScope era inclusa in WindowsBase in .NET Framework 3.5 e .NET Framework 3.0, ma è presente in System.Xaml in .NET Framework 4. INameScope definisce le operazioni di base per un ambito dei nomi XAML.

Classi correlate a XAML con nomi condivisi incluse in WPF e System.Xaml

Le classi seguenti sono incluse sia negli assembly WPF, sia nell'assembly System.Xaml in .NET Framework 4:

XamlReader

XamlWriter

XamlParseException

L'implementazione WPF si trova nello spazio dei nomi System.Windows.Markup e nell'assembly PresentationFramework. L'implementazione di System.Xaml si trova nello spazio dei nomi System.Xaml. Se si utilizzano tipi WPF o si deriva da tipi WPF, è in genere necessario utilizzare le implementazioni WPF di XamlReader e XamlWriter anziché le implementazioni di System.Xaml. Per ulteriori informazioni ed esempi, vedere la sezione Note in System.Windows.Markup.XamlReader e System.Windows.Markup.XamlWriter.

Se si includono riferimenti sia ad assembly WPF sia a System.Xaml e si utilizzano inoltre istruzioni include per gli spazi dei nomi System.Windows.Markup e System.Xaml, potrebbe essere necessario completare le chiamate a queste API per risolvere i tipi senza ambiguità.

Vedere anche

Concetti

Servizi XAML