Condividi tramite


Tipi migrati da WPF a System.Xaml

In .NET Framework 3.5 e .NET Framework 3.0, Windows Presentation Foundation (WPF) e Windows Workflow Foundation includevano un'implementazione del linguaggio XAML. Molti dei tipi pubblici che fornivano l'estendibilità per l'implementazione XAML WPF esistevano negli assembly WindowsBase, PresentationCore e PresentationFramework. Analogamente, i tipi pubblici che fornivano l'estensibilità per Windows Workflow Foundation XAML esistevano nell'assembly System.Workflow.ComponentModel. In .NET Framework 4 alcuni dei tipi correlati a XAML sono stati migrati all'assembly System.Xaml. Un'implementazione comune di .NET Framework dei servizi di linguaggio XAML consente molti scenari di estendibilità XAML originariamente definiti dall'implementazione XAML di un framework specifico, ma fanno ora parte del supporto generale del linguaggio XAML di .NET Framework 4. Questo articolo elenca i tipi di cui è stata eseguita la migrazione e illustra i problemi relativi alla migrazione.

Assembly e spazi dei nomi

In .NET Framework 3.5 e .NET Framework 3.0, i tipi implementati da WPF per supportare XAML erano in genere nello spazio dei nomi System.Windows.Markup. La maggior parte di questi tipi si trovava nell'assembly WindowsBase.

In .NET Framework 4 è disponibile un nuovo System.Xaml spazio dei nomi e un nuovo assembly System.Xaml. Molti dei tipi originariamente implementati per XAML WPF sono ora forniti come punti di estendibilità o servizi per qualsiasi implementazione di XAML. Al fine di renderli disponibili per scenari più generali, i tipi vengono trasferiti dal loro assembly WPF originale all'assembly System.Xaml. Ciò consente scenari di estendibilità XAML senza dover includere gli assembly di altri framework, ad esempio WPF e Windows Workflow Foundation.

Per i tipi migrati, la maggior parte dei tipi rimane nello System.Windows.Markup spazio dei nomi. Ciò è stato fatto parzialmente per evitare di interrompere i mapping degli spazi dei nomi CLR nelle implementazioni esistenti su base per-file. Di conseguenza, lo spazio dei nomi System.Windows.Markup in .NET Framework 4 contiene una miscela di tipi di supporto linguistico XAML generali (dall'assembly System.Xaml) e tipi specifici per l'implementazione XAML di WPF (da WindowsBase e altri assembly WPF). Qualsiasi tipo migrato a System.Xaml, ma esistente in precedenza in un assembly WPF, dispone del supporto per l'inoltro dei tipi nella versione 4 dell'assembly WPF.

Tipi di supporto XAML del flusso di lavoro

Windows Workflow Foundation ha anche fornito tipi di supporto XAML e in molti casi questi hanno nomi brevi identici a un equivalente WPF. Di seguito è riportato un elenco dei tipi di supporto XAML di Windows Workflow Foundation:

Questi tipi di supporto esistono ancora negli assembly windows Workflow Foundation per .NET Framework 4 e possono comunque essere usati per applicazioni Windows Workflow Foundation specifiche; Tuttavia, non devono essere referenziati da applicazioni o framework che non usano Windows Workflow Foundation.

MarkupExtension

In .NET Framework 3.5 e .NET Framework 3.0 la MarkupExtension classe per WPF era nell'assembly WindowsBase. Classe parallela per Windows Workflow Foundation, MarkupExtension, esistente nell'assembly System.Workflow.ComponentModel. Nel .NET Framework 4, la classe MarkupExtension viene migrata all'assembly System.Xaml. In .NET Framework 4 MarkupExtension è destinato a qualsiasi scenario di estendibilità XAML che usa i servizi XAML .NET, non solo per quelli basati su framework specifici. Quando possibile, framework specifici o codice utente nel framework possono anche basarsi sulla classe MarkupExtension per l'estensione XAML.

Classi di servizio di supporto MarkupExtension

.NET Framework 3.5 e .NET Framework 3.0 per WPF hanno fornito diversi servizi disponibili per MarkupExtension gli implementatori e TypeConverter le implementazioni per supportare l'utilizzo di tipi/proprietà in XAML. Questi servizi sono i seguenti:

Annotazioni

Un altro servizio di .NET Framework 3.5 correlato alle estensioni di markup è l'interfaccia IReceiveMarkupExtension . IReceiveMarkupExtension non è stata migrata ed è contrassegnata [Obsolete] per .NET Framework 4. Gli scenari che in precedenza usavano IReceiveMarkupExtension devono invece usare callback attribuiti XamlSetMarkupExtensionAttribute. AcceptedMarkupExtensionExpressionTypeAttribute è anche contrassegnato come [Obsolete].

Funzionalità del linguaggio XAML

Nell'assembly PresentationFramework esistono in precedenza diversi componenti e funzionalità del linguaggio XAML per WPF. Questi elementi sono stati implementati come MarkupExtension sottoclasse per esporre gli utilizzi delle estensioni di markup nel markup XAML. In .NET Framework 4 esistono nell'assembly System.Xaml in modo che i progetti che non includono assembly WPF possano usare queste funzionalità a livello di linguaggio XAML. WPF usa 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 nel System.Windows.Markup spazio dei nomi per evitare la rottura dei riferimenti precedenti.

La tabella seguente contiene un elenco delle classi di supporto delle funzionalità XAML definite in System.Xaml.

Funzionalità del linguaggio XAML Uso
ArrayExtension <x:Array ...>
NullExtension {x:Null}
StaticExtension {x:Static ...}
TypeExtension {x:Type ...}

Anche se System.Xaml potrebbe non avere classi di supporto specifiche, la logica generale per l'elaborazione delle caratteristiche del linguaggio XAML risiede ora in System.Xaml e nei lettori e scrittori XAML implementati. Ad esempio, x:TypeArguments è un attributo elaborato dai lettori XAML e dai writer XAML delle implementazioni System.Xaml. Può essere notato nel flusso del nodo XAML, ha la gestione nel contesto dello schema XAML predefinito (basato su CLR), ha una rappresentazione del sistema di tipi XAML e così via. Per altre informazioni sulla documentazione di riferimento per XAML, vedi Servizi XAML.

ValueSerializer e classi di supporto

La classe ValueSerializer supporta la conversione di tipi in una stringa, in particolare nei casi di serializzazione XAML in cui la serializzazione può richiedere modalità o nodi multipli nell'output. Nel .NET Framework 3.5 e .NET Framework 3.0, ValueSerializer di WPF si trovava nell'assembly WindowsBase. In .NET Framework 4 la ValueSerializer classe è in System.Xaml ed è destinata a qualsiasi scenario di estendibilità XAML, non solo per quelli che si basano su WPF. IValueSerializerContext (un servizio di supporto) e DateTimeValueSerializer (una sottoclasse specifica) vengono migrati anche a System.Xaml.

XAML WPF include diversi attributi che possono essere applicati ai tipi CLR per indicare qualcosa sul comportamento XAML. Di seguito è riportato un elenco degli attributi esistenti 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 varie

L'interfaccia IComponentConnector esiste in WindowsBase in .NET Framework 3.5 e .NET Framework 3.0, ma esiste in System.Xaml in .NET Framework 4. IComponentConnector è destinato principalmente al supporto degli strumenti e ai compilatori di markup XAML.

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

Le classi seguenti esistono sia negli assembly WPF che 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 usano tipi WPF o si derivano da tipi WPF, in genere è consigliabile usare le implementazioni WPF di XamlReader e XamlWriter invece delle implementazioni System.Xaml. Per altre informazioni, vedere Osservazioni in System.Windows.Markup.XamlReader e System.Windows.Markup.XamlWriter.

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