Bagikan melalui


Code-Behind dan XAML di WPF

Code-behind adalah istilah yang digunakan untuk menjelaskan kode yang digabungkan dengan objek yang ditentukan markup, saat halaman XAML dikompilasi markup. Topik ini menjelaskan persyaratan untuk code-behind serta mekanisme kode sebaris alternatif untuk kode di XAML.

Topik ini berisi bagian berikut:

Prasyarat

Topik ini mengasumsikan bahwa Anda telah membaca XAML di WPF dan memiliki beberapa pengetahuan dasar tentang CLR dan pemrograman berorientasi objek.

Code-Behind dan Bahasa XAML

Bahasa XAML mencakup fitur tingkat bahasa yang memungkinkan untuk mengaitkan file kode dengan file markup, dari sisi file markup. Secara khusus, bahasa XAML mendefinisikan fitur bahasa x:Class Directive, x:Subclass Directive, dan x:ClassModifier Directive. Persis bagaimana kode harus diproduksi, dan cara mengintegrasikan markup dan kode, bukan bagian dari apa yang ditentukan bahasa XAML. Diserahkan ke kerangka kerja seperti WPF untuk menentukan cara mengintegrasikan kode, cara menggunakan XAML dalam aplikasi dan model pemrograman, dan tindakan build atau dukungan lain yang diperlukan semua ini.

Persyaratan Code-behind, Event Handler, dan Partial Class di WPF

  • Kelas parsial harus berasal dari jenis yang mendukung elemen akar.

  • Perhatikan bahwa di bawah perilaku default tindakan build kompilasi markup, Anda dapat membiarkan derivasi kosong dalam definisi kelas parsial di sisi code-behind. Hasil yang dikompilasi akan mengasumsikan jenis dukungan akar halaman menjadi dasar untuk kelas parsial, bahkan jika tidak ditentukan. Namun, mengandalkan perilaku ini bukanlah praktik terbaik.

  • Penanganan aktivitas yang Anda tulis di code-behind harus berupa metode instans dan tidak dapat menjadi metode statis. Metode ini harus didefinisikan oleh kelas parsial dalam namespace CLR yang diidentifikasi oleh x:Class. Anda tidak dapat memenuhi syarat nama penanganan aktivitas untuk menginstruksikan prosesor XAML untuk mencari penanganan aktivitas untuk kabel peristiwa dalam cakupan kelas yang berbeda.

  • Handler harus cocok dengan delegasi untuk peristiwa yang sesuai dalam sistem jenis backing.

  • Untuk bahasa Microsoft Visual Basic secara khusus, Anda dapat menggunakan kata kunci khusus Handles bahasa untuk mengaitkan handler dengan instans dan peristiwa dalam deklarasi handler, alih-alih melampirkan handler dengan atribut di XAML. Namun, teknik ini memang memiliki beberapa batasan karena Handles kata kunci tidak dapat mendukung semua fitur tertentu dari sistem peristiwa WPF, seperti skenario peristiwa tertentu yang dirutekan atau peristiwa terlampir. Untuk detailnya, lihat Penanganan Peristiwa Visual Basic dan WPF.

x:Code

x:Code adalah elemen direktif yang ditentukan dalam XAML. Elemen x:Code direktif dapat berisi kode pemrograman sebaris. Kode yang didefinisikan sebaris dapat berinteraksi dengan XAML pada halaman yang sama. Contoh berikut mengilustrasikan kode C# sebaris. Perhatikan bahwa kode berada di dalam x:Code elemen dan bahwa kode harus dikelilingi oleh <CDATA[...]]> untuk menghindari konten untuk XML, sehingga prosesor XAML (menafsirkan skema XAML atau skema WPF) tidak akan mencoba menafsirkan konten secara harfiah sebagai XML.

<Page
  xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
  x:Class="MyNamespace.MyCanvasCodeInline"
>
  <Button Name="button1" Click="Clicked">Click Me!</Button>
  <x:Code><![CDATA[
    void Clicked(object sender, RoutedEventArgs e)
    {
        button1.Content = "Hello World";
    }
  ]]></x:Code>
</Page>

Batasan Kode Sebaris

Anda harus mempertimbangkan untuk menghindari atau membatasi penggunaan kode sebaris. Dalam hal arsitektur dan filosofi pengkodean, mempertahankan pemisahan antara markup dan code-behind membuat peran perancang dan pengembang jauh lebih berbeda. Pada tingkat yang lebih teknis, kode yang Anda tulis untuk kode sebaris bisa canggung untuk ditulis, karena Anda selalu menulis ke dalam kelas parsial yang dihasilkan XAML, dan hanya dapat menggunakan pemetaan namespace XML default. Karena Anda tidak dapat menambahkan using pernyataan, Anda harus sepenuhnya memenuhi syarat banyak panggilan API yang Anda buat. Pemetaan WPF default mencakup sebagian besar tetapi tidak semua namespace CLR yang ada di rakitan WPF; Anda harus sepenuhnya memenuhi syarat panggilan ke jenis dan anggota yang terkandung dalam namespace CLR lainnya. Anda juga tidak dapat menentukan apa pun di luar kelas parsial dalam kode sebaris, dan semua entitas kode pengguna yang Anda referensikan harus ada sebagai anggota atau variabel dalam kelas parsial yang dihasilkan. Fitur pemrograman khusus bahasa lain, seperti makro atau #ifdef terhadap variabel global atau variabel build, juga tidak tersedia. Untuk informasi selengkapnya, lihat x:Code Intrinsic XAML Type.

Baca juga