Pengantar Perender Kustom
Perender kustom memberikan pendekatan yang kuat untuk menyesuaikan tampilan dan perilaku Xamarin.Forms kontrol. Mereka dapat digunakan untuk perubahan gaya kecil atau penyesuaian tata letak dan perilaku khusus platform yang canggih. Artikel ini menyediakan pengenalan perender kustom, dan menguraikan proses untuk membuat perender kustom.
Xamarin.FormsHalaman, Tata Letak, dan Kontrol menyajikan API umum untuk menjelaskan antarmuka pengguna seluler lintas platform. Setiap halaman, tata letak, dan kontrol dirender secara berbeda di setiap platform, menggunakan Renderer
kelas yang pada gilirannya membuat kontrol asli (sesuai dengan Xamarin.Forms representasi), mengaturnya di layar, dan menambahkan perilaku yang ditentukan dalam kode bersama.
Pengembang dapat menerapkan kelas kustom Renderer
mereka sendiri untuk menyesuaikan tampilan dan/atau perilaku kontrol. Perender kustom untuk jenis tertentu dapat ditambahkan ke satu proyek aplikasi untuk menyesuaikan kontrol di satu tempat sambil memungkinkan perilaku default pada platform lain; atau perender kustom yang berbeda dapat ditambahkan ke setiap proyek aplikasi untuk membuat tampilan dan nuansa yang berbeda di iOS, Android, dan Platform Windows Universal (UWP). Namun, menerapkan kelas perender kustom untuk melakukan penyesuaian kontrol sederhana sering kali merupakan respons berat. Efek menyederhanakan proses ini, dan biasanya digunakan untuk perubahan gaya kecil. Untuk informasi selengkapnya, lihat Efek.
Memeriksa Mengapa Perender Kustom Diperlukan
Mengubah tampilan Xamarin.Forms kontrol, tanpa menggunakan perender kustom, adalah proses dua langkah yang melibatkan pembuatan kontrol kustom melalui subkelas, lalu menggunakan kontrol kustom sebagai pengganti kontrol asli. Contoh kode berikut menunjukkan contoh subkelas Entry
kontrol:
public class MyEntry : Entry
{
public MyEntry ()
{
BackgroundColor = Color.Gray;
}
}
Kontrol MyEntry
adalah Entry
kontrol di mana BackgroundColor
diatur ke abu-abu, dan dapat direferensikan di Xaml dengan mendeklarasikan namespace untuk lokasinya dan menggunakan awalan namespace pada elemen kontrol. Contoh kode berikut menunjukkan bagaimana MyEntry
kontrol kustom dapat dikonsumsi oleh ContentPage
:
<ContentPage
...
xmlns:local="clr-namespace:CustomRenderer;assembly=CustomRenderer"
...>
...
<local:MyEntry Text="In Shared Code" />
...
</ContentPage>
Awalan local
namespace bisa apa saja. Namun, namespace
nilai dan assembly
harus cocok dengan detail kontrol kustom. Setelah namespace dinyatakan, awalan digunakan untuk mereferensikan kontrol kustom.
Catatan
Menentukan xmlns
jauh lebih sederhana dalam proyek pustaka .NET Standard daripada Proyek Bersama. Pustaka .NET Standard dikompilasi ke dalam rakitan sehingga mudah untuk menentukan nilainya assembly=CustomRenderer
. Saat menggunakan Proyek Bersama, semua aset bersama (termasuk XAML) dikompilasi ke dalam setiap proyek referensi, yang berarti bahwa jika proyek iOS, Android, dan UWP memiliki nama rakitan mereka sendiri, tidak mungkin untuk menulis xmlns
deklarasi karena nilainya harus berbeda untuk setiap aplikasi. Kontrol kustom di XAML untuk Proyek Bersama akan mengharuskan setiap proyek aplikasi dikonfigurasi dengan nama rakitan yang sama.
MyEntry
Kontrol kustom kemudian dirender pada setiap platform, dengan latar belakang abu-abu, seperti yang ditunjukkan pada cuplikan layar berikut:
Mengubah warna latar belakang kontrol pada setiap platform telah dicapai murni melalui subkelas kontrol. Namun, teknik ini terbatas pada apa yang dapat dicapai karena tidak mungkin untuk memanfaatkan penyempurnaan dan penyesuaian khusus platform. Ketika diperlukan, perender kustom harus diimplementasikan.
Membuat Kelas Perender Kustom
Proses untuk membuat kelas perender kustom adalah sebagai berikut:
- Buat subkelas kelas perender yang merender kontrol asli.
- Ambil alih metode yang merender kontrol asli dan logika tulis untuk menyesuaikan kontrol. Seringkali,
OnElementChanged
metode ini digunakan untuk merender kontrol asli, yang dipanggil ketika kontrol yang Xamarin.Forms sesuai dibuat. ExportRenderer
Tambahkan atribut ke kelas perender kustom untuk menentukan bahwa atribut tersebut akan digunakan untuk merender Xamarin.Forms kontrol. Atribut ini digunakan untuk mendaftarkan perender kustom dengan Xamarin.Forms.
Catatan
Untuk sebagian besar Xamarin.Forms elemen, adalah opsional untuk menyediakan perender kustom di setiap proyek platform. Jika perender kustom tidak terdaftar, maka perender default untuk kelas dasar kontrol akan digunakan. Namun, perender kustom diperlukan dalam setiap proyek platform saat merender elemen View atau ViewCell .
Topik dalam seri ini akan memberikan demonstrasi dan penjelasan tentang proses ini untuk elemen yang berbeda Xamarin.Forms .
Pemecahan Masalah
Jika kontrol kustom terkandung dalam proyek pustaka .NET Standard yang telah ditambahkan ke solusi (yaitu bukan pustaka .NET Standard yang dibuat oleh templat proyek Visual Studio untuk Mac/Visual Studio Xamarin.Forms App), pengecualian dapat terjadi di iOS saat mencoba mengakses kontrol kustom. Jika masalah ini terjadi, masalah ini dapat diselesaikan dengan membuat referensi ke kontrol kustom dari AppDelegate
kelas:
var temp = new ClassInPCL(); // in AppDelegate, but temp not used anywhere
Ini memaksa pengkompilasi untuk mengenali ClassInPCL
jenis dengan menyelesaikannya. Atau, Preserve
atribut dapat ditambahkan ke AppDelegate
kelas untuk mencapai hasil yang sama:
[assembly: Preserve (typeof (ClassInPCL))]
Ini membuat referensi ke ClassInPCL
jenis , menunjukkan bahwa itu diperlukan pada runtime. Untuk informasi selengkapnya, lihat Mempertahankan Kode.
Ringkasan
Artikel ini telah memberikan pengenalan perender kustom, dan telah menguraikan proses untuk membuat perender kustom. Perender kustom memberikan pendekatan yang kuat untuk menyesuaikan tampilan dan perilaku Xamarin.Forms kontrol. Mereka dapat digunakan untuk perubahan gaya kecil atau penyesuaian tata letak dan perilaku khusus platform yang canggih.