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'estensibilità per l'implementazione XAML di WPF erano inclusi negli assembly WindowsBase, PresentationCore e PresentationFramework. Analogamente, i tipi pubblici che fornivano l'estendibilità per XAML windows Workflow Foundation 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 System.Windows.Markup nomi . La maggior parte di questi tipi era inclusa nell'assembly WindowsBase.

In .NET Framework 4 è disponibile un nuovo System.Xaml spazio dei nomi e un nuovo assembly System.Xaml. Molti dei tipi implementati in origine per XAML di WPF sono ora forniti come punti di estendibilità 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. Ciò consente scenari di estendibilità XAML senza dover includere gli 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 dello spazio dei nomi CLR nelle implementazioni esistenti su base file. Di conseguenza, lo System.Windows.Markup spazio dei nomi in .NET Framework 4 contiene una combinazione di tipi di supporto del linguaggio XAML generali (dall'assembly System.Xaml) e tipi specifici per l'implementazione XAML WPF (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 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. In .NET Framework 4 la MarkupExtension classe 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 deve essere basati anche sulla classe MarkupExtension per l'estensione XAML.

MarkupExtension con supporto di classi del servizio

.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:

Nota

Un altro servizio di .NET Framework 3.5 correlato alle estensioni di markup è l'interfaccia IReceiveMarkupExtension . IReceiveMarkupExtension non è stata eseguita la migrazione ed è contrassegnata [Obsolete] per .NET Framework 4. Negli scenari in precedenza veniva usato IReceiveMarkupExtension , ora invece è necessario usare callback con attributi XamlSetMarkupExtensionAttribute . AncheAcceptedMarkupExtensionExpressionTypeAttribute è contrassegnato come [Obsolete].

Funzionalità del linguaggio XAML

Diversi componenti e funzionalità del linguaggio XAML per WPF erano in precedenza inclusi nell'assembly PresentationFramework. Questi venivano implementati come una sottoclasse MarkupExtension 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 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 ...}

Sebbene 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. 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 per i casi di serializzazione di XAML in cui per la serializzazione possono essere necessarie più modalità o nodi nell'output. In .NET Framework 3.5 e .NET Framework 3.0, per ValueSerializer 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. Viene inoltre eseguita la migrazione degli oggettiIValueSerializerContext (servizio di supporto) e DateTimeValueSerializer (sottoclasse specifica) a System.Xaml.

In XAML per WPF erano inclusi vari attributi che potevano essere applicati a tipi CLR per fornire indicazioni sul relativo 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 di vario tipo

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. L'interfacciaIComponentConnector è principalmente destinata al supporto per gli strumenti di supporto e 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 NameScope 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 deriva da tipi WPF, è in genere necessario usare le implementazioni WPF di XamlReader e XamlWriter anziché le implementazioni di System.Xaml. Per altre informazioni, vedere la sezione Osservazioni in System.Windows.Markup.XamlReader e System.Windows.Markup.XamlWriter.

Se si includono riferimenti agli assembly WPF a System.Xaml e si usano anche istruzioni include per 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à.