MarkupExtension.ProvideValue(IServiceProvider) Metode
Definisi
Penting
Beberapa informasi terkait produk prarilis yang dapat diubah secara signifikan sebelum dirilis. Microsoft tidak memberikan jaminan, tersirat maupun tersurat, sehubungan dengan informasi yang diberikan di sini.
Saat diimplementasikan di kelas turunan, mengembalikan objek yang disediakan sebagai nilai properti target untuk ekstensi markup ini.
public:
abstract System::Object ^ ProvideValue(IServiceProvider ^ serviceProvider);
public abstract object ProvideValue (IServiceProvider serviceProvider);
abstract member ProvideValue : IServiceProvider -> obj
Public MustOverride Function ProvideValue (serviceProvider As IServiceProvider) As Object
Parameter
- serviceProvider
- IServiceProvider
Pembantu penyedia layanan yang dapat menyediakan layanan untuk ekstensi markup.
Mengembalikan
Nilai objek yang akan diatur pada properti tempat ekstensi diterapkan.
Keterangan
Ketika prosesor XAML memproses node jenis dan nilai anggota yang merupakan ekstensi markup, prosesor ini memanggil ProvideValue metode ekstensi markup tersebut dan menulis hasilnya ke dalam grafik objek atau aliran serialisasi. Penulis objek XAML meneruskan konteks layanan ke setiap implementasi tersebut serviceProvider
melalui parameter .
Lihat bagian "Catatan untuk Pelaksana" untuk informasi selengkapnya tentang cara mengimplementasikan ProvideValue dalam ekstensi markup kustom.
Catatan Penggunaan WPF
Penting
Kelas WPF yang memiliki interaksi khusus dengan operasi set markup tidak boleh diandalkan IReceiveMarkupExtension untuk implementasi .NET Framework 4. Gunakan XamlSetMarkupExtensionAttributepanggilan balik -atribut sebagai gantinya.
Catatan Bagi Implementer
Layanan umum yang dikembalikan oleh penyedia layanan default yang biasanya tersedia untuk implementasi kustom atau yang sudah ada MarkupExtension termasuk layanan utama berikut.
IProvideValueTarget melaporkan referensi objek dan pengidentifikasi properti dari konteks tempat ekstensi markup digunakan
IXamlTypeResolver mengekspos layanan yang menyejajarkan perilaku penulisan objek XAML umum yang dapat memberikan Type berdasarkan nama jenis XAML. Nama dapat secara opsional menyertakan awalan untuk namespace XAML yang dipetakan.
IXamlSchemaContextProvider mengekspos konteks skema XAML aktif secara langsung. Dari yang dilaporkan XamlSchemaContext, Anda dapat memperoleh informasi konteks skema XAML seperti bagaimana rakitan dipetakan untuk dukungan jenis, awalan pilihan dalam rakitan, daftar masing-masing XamlType dalam perakitan, dan sebagainya.
Layanan lain yang tersedia untuk skenario ekstensi markup yang lebih khusus meliputi:
Berpotensi, implementasi ProvideValue(IServiceProvider) dapat mengabaikan serviceProvider
parameter . Ini layak untuk beberapa skenario dasar, di mana tidak ada konteks yang diperlukan untuk mengembalikan nilai.
Dalam penggunaan umum, .NET Framework Layanan XAML dan penulis objek XAML yang diimplementasikan akan menyediakan penyedia layanan untuk semua metode pengonversi nilai yang dipanggil selama pemrosesan XAML. Namun, untuk ketahanan, Anda harus menyediakan jalur kode untuk nilai null baik untuk penyedia layanan itu sendiri maupun untuk layanan yang diminta. Nilai null mungkin terjadi jika ekstensi markup Anda diterapkan dalam keadaan di mana dukungan layanan umum yang disediakan oleh infrastruktur prosesor XAML tidak tersedia.
Untuk informasi selengkapnya tentang layanan yang tersedia dari konteks penyedia layanan XAML dan cara menggunakannya, lihat Jenis Pengonversi dan Ekstensi Markup untuk XAML.
Implementasi yang mengharuskan layanan tertentu tersedia untuk menghasilkan hasil yang berguna ProvideValue(IServiceProvider) diharapkan untuk melemparkan pengecualian jika layanan tersebut tidak tersedia. Pengecualian yang disarankan untuk dilemparkan adalah InvalidOperationException.
Implementasi juga dapat melemparkan pengecualian jika salah satu argumen yang dibutuhkan ekstensi markup kustom untuk memberikan nilai null, tidak valid untuk jenis datanya, atau tidak berisi nilai yang mampu diproses oleh ekstensi markup. Pengecualian yang disarankan untuk dilemparkan adalah InvalidOperationException.