Jenis yang dimigrasikan dari WPF ke System.Xaml

Dalam .NET Framework 3.5 dan .NET Framework 3.0, Windows Presentation Foundation (WPF) dan Windows Workflow Foundation menyertakan implementasi bahasa XAML. Banyak jenis publik yang memberikan ekstensibilitas untuk implementasi WPF XAML ada di rakitan WindowsBase, PresentationCore, dan PresentationFramework. Demikian juga, jenis publik yang memberikan ekstensibilitas untuk Windows Workflow Foundation XAML ada di rakitan System.Workflow.ComponentModel. Dalam .NET Framework 4, beberapa jenis terkait XAML dimigrasikan ke rakitan System.Xaml. Implementasi .NET Framework umum dari layanan bahasa XAML memungkinkan banyak skenario ekstensibilitas XAML yang awalnya didefinisikan oleh implementasi XAML kerangka kerja tertentu tetapi sekarang menjadi bagian dari dukungan bahasa XAML .NET Framework 4 secara keseluruhan. Artikel ini mencantumkan jenis yang dimigrasikan dan membahas masalah yang terkait dengan migrasi.

Rakitan dan Namespace

Dalam .NET Framework 3.5 dan .NET Framework 3.0, jenis yang diterapkan WPF untuk mendukung XAML umumnya berada di System.Windows.Markup namespace layanan. Sebagian besar jenis ini berada di rakitan WindowsBase.

Di .NET Framework 4, ada namespace baru System.Xaml dan rakitan System.Xaml baru. Banyak jenis yang awalnya diimplementasikan untuk WPF XAML sekarang disediakan sebagai titik atau layanan ekstensibilitas untuk implementasi XAML apa pun. Sebagai bagian dari membuatnya tersedia untuk skenario yang lebih umum, jenisnya diteruskan dari rakitan WPF asli mereka ke rakitan System.Xaml. Ini memungkinkan skenario ekstensibilitas XAML tanpa harus menyertakan rakitan kerangka kerja lain (seperti WPF dan Windows Workflow Foundation).

Untuk jenis yang dimigrasikan, sebagian besar jenis tetap berada di System.Windows.Markup namespace layanan. Ini sebagian untuk menghindari pemetaan namespace CLR yang melanggar dalam implementasi yang ada berdasarkan per file. Akibatnya, System.Windows.Markup namespace dalam .NET Framework 4 berisi campuran jenis dukungan bahasa XAML umum (dari rakitan System.Xaml) dan jenis yang khusus untuk implementasi WPF XAML (dari WindowsBase dan rakitan WPF lainnya). Jenis apa pun yang dimigrasikan ke System.Xaml, tetapi sebelumnya ada dalam rakitan WPF, memiliki dukungan penerusan jenis di versi 4 dari rakitan WPF.

Jenis Dukungan XAML Alur Kerja

Windows Workflow Foundation juga menyediakan jenis dukungan XAML, dan dalam banyak kasus ini memiliki nama pendek yang identik dengan WPF yang setara. Berikut ini adalah daftar jenis dukungan XAML Windows Workflow Foundation:

Jenis dukungan ini masih ada di rakitan Windows Workflow Foundation untuk .NET Framework 4 dan masih dapat digunakan untuk aplikasi Windows Workflow Foundation tertentu; namun, mereka tidak boleh dirujuk oleh aplikasi atau kerangka kerja yang tidak menggunakan Windows Workflow Foundation.

MarkupExtension

Dalam .NET Framework 3.5 dan .NET Framework 3.0, MarkupExtension kelas untuk WPF berada di perakitan WindowsBase. Kelas paralel untuk Windows Workflow Foundation, MarkupExtension, ada di rakitan System.Workflow.ComponentModel. Di .NET Framework 4, MarkupExtension kelas dimigrasikan ke rakitan System.Xaml. Dalam .NET Framework 4, MarkupExtension ditujukan untuk skenario ekstensibilitas XAML apa pun yang menggunakan Layanan XAML .NET, bukan hanya untuk mereka yang membangun kerangka kerja tertentu. Jika memungkinkan, kerangka kerja atau kode pengguna tertentu dalam kerangka kerja juga harus dibangun pada MarkupExtension kelas untuk ekstensi XAML.

Kelas Layanan Pendukung MarkupExtension

.NET Framework 3.5 dan .NET Framework 3.0 untuk WPF menyediakan beberapa layanan yang tersedia untuk MarkupExtension implementasi dan TypeConverter implementasi untuk mendukung penggunaan jenis/properti di XAML. Layanan-layanan ini adalah sebagai berikut:

Catatan

Layanan lain dari .NET Framework 3.5 yang terkait dengan ekstensi markup adalah IReceiveMarkupExtension antarmuka. IReceiveMarkupExtension tidak dimigrasikan dan ditandai [Obsolete] untuk .NET Framework 4. Skenario yang sebelumnya digunakan IReceiveMarkupExtension harus menggunakan XamlSetMarkupExtensionAttribute panggilan balik yang diatribusikan. AcceptedMarkupExtensionExpressionTypeAttribute juga ditandai [Obsolete].

Fitur Bahasa XAML

Beberapa fitur dan komponen bahasa XAML untuk WPF sebelumnya ada di rakitan PresentationFramework. Ini diimplementasikan sebagai MarkupExtension subkelas untuk mengekspos penggunaan ekstensi markup dalam markup XAML. Dalam .NET Framework 4, ini ada di rakitan System.Xaml sehingga proyek yang tidak menyertakan rakitan WPF dapat menggunakan fitur tingkat bahasa XAML ini. WPF menggunakan implementasi yang sama ini untuk aplikasi .NET Framework 4. Seperti halnya kasus lain yang tercantum dalam topik ini, jenis pendukung terus ada di System.Windows.Markup namespace layanan untuk menghindari pemecahan referensi sebelumnya.

Tabel berikut berisi daftar kelas dukungan fitur XAML yang ditentukan dalam System.Xaml.

Fitur Bahasa XAML Penggunaan
ArrayExtension <x:Array ...>
NullExtension {x:Null}
StaticExtension {x:Static ...}
TypeExtension {x:Type ...}

Meskipun System.Xaml mungkin tidak memiliki kelas dukungan khusus, logika umum untuk memproses fitur bahasa untuk bahasa XAML sekarang berada di System.Xaml dan pembaca XAML dan penulis XAML yang diimplementasikan. Misalnya, x:TypeArguments adalah atribut yang diproses oleh pembaca XAML dan penulis XAML dari implementasi System.Xaml; dapat dicatat dalam aliran simpul XAML, memiliki penanganan dalam konteks skema XAML default (berbasis CLR), memiliki representasi sistem jenis XAML, dan sebagainya. Untuk informasi selengkapnya tentang dokumentasi referensi untuk XAML, lihat Layanan XAML.

Kelas ValueSerializer dan Pendukung

Kelas ValueSerializer ini mendukung konversi jenis ke string, terutama untuk kasus serialisasi XAML di mana serialisasi mungkin memerlukan beberapa mode atau node dalam output. Dalam .NET Framework 3.5 dan .NET Framework 3.0, ValueSerializer untuk WPF berada di rakitan WindowsBase. Dalam .NET Framework 4, ValueSerializer kelas berada di System.Xaml dan ditujukan untuk skenario ekstensibilitas XAML apa pun, bukan hanya untuk mereka yang membangun WPF. IValueSerializerContext (layanan pendukung) dan DateTimeValueSerializer (subkelas tertentu) juga dimigrasikan ke System.Xaml.

WPF XAML menyertakan beberapa atribut yang dapat diterapkan ke jenis CLR untuk menunjukkan sesuatu tentang perilaku XAML mereka. Berikut ini adalah daftar atribut yang ada di rakitan WPF di .NET Framework 3.5 dan .NET Framework 3.0. Atribut ini dimigrasikan ke System.Xaml di .NET Framework 4.

Kelas Lain-lain

Antarmuka IComponentConnector ada di WindowsBase di .NET Framework 3.5 dan .NET Framework 3.0, tetapi ada di System.Xaml di .NET Framework 4. IComponentConnector terutama ditujukan untuk dukungan alat dan kompilator markup XAML.

Antarmuka INameScope ada di WindowsBase di .NET Framework 3.5 dan .NET Framework 3.0, tetapi ada di System.Xaml di .NET Framework 4. INameScope menentukan operasi dasar untuk namescope XAML.

Kelas berikut ada di rakitan WPF dan rakitan System.Xaml di .NET Framework 4:

XamlReader

XamlWriter

XamlParseException

Implementasi WPF ditemukan di System.Windows.Markup namespace, dan perakitan PresentationFramework. Implementasi System.Xaml ditemukan di System.Xaml namespace layanan. Jika Anda menggunakan jenis WPF atau berasal dari jenis WPF, Anda biasanya harus menggunakan implementasi XamlReader WPF dan XamlWriter alih-alih implementasi System.Xaml. Untuk informasi selengkapnya, lihat Komentar di System.Windows.Markup.XamlReader dan System.Windows.Markup.XamlWriter.

Jika Anda menyertakan referensi ke rakitan WPF dan System.Xaml, dan Anda juga menggunakan include pernyataan untuk System.Windows.Markup namespace layanan dan System.Xaml , Anda mungkin perlu sepenuhnya memenuhi syarat panggilan ke API ini untuk menyelesaikan jenis tanpa ambiguitas.