XAML - Ekstensi Markup
Dalam aplikasi XAML, ekstensi markup adalah metode / teknik untuk mendapatkan nilai yang bukan merupakan objek XAML tertentu maupun tipe primitif. Ekstensi markup dapat ditentukan dengan membuka dan menutup tanda kurung kurawal dan di dalam tanda kurung kurawal tersebut, cakupan ekstensi markup ditentukan.
Pengikatan data dan sumber daya statis adalah ekstensi markup. Ada beberapa ekstensi markup XAML yang telah ditentukan diSystem.xaml yang bisa digunakan.
Mari kita lihat contoh sederhana di mana StaticResources ekstensi markup digunakan yang merupakan ekstensi markup XAML yang telah ditentukan sebelumnya.
Kode XAML berikut membuat dua blok teks dengan beberapa properti dan latar depannya ditentukan di Window.Resources.
<Window x:Class = "XAMLStaticResourcesMarkupExtension.MainWindow"
xmlns = "http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x = "http://schemas.microsoft.com/winfx/2006/xaml"
Title = "MainWindow" Height = "350" Width = "525">
<Window.Resources>
<SolidColorBrush Color = "Blue" x:Key = "myBrush"></SolidColorBrush>
</Window.Resources>
<Grid>
<StackPanel Orientation = "Vertical">
<TextBlock Foreground = "{StaticResource myBrush}" Text = "First Name"
Width = "100" Margin = "10" />
<TextBlock Foreground = "{StaticResource myBrush}" Text = "Last Name"
Width = "100" Margin = "10" />
</StackPanel>
</Grid>
</Window>
Di Window.Resources, kamu bisa lihat x:Key digunakan yang secara unik mengidentifikasi elemen yang dibuat dan direferensikan dalam kamus yang ditentukan XAML untuk mengidentifikasi sumber daya dalam kamus sumber daya.
Ketika Anda mengkompilasi dan menjalankan kode di atas, itu akan menghasilkan MainWindow berikut. Anda dapat melihat dua blok teks dengan warna latar depan biru.
Di XAML, ekstensi markup khusus juga dapat ditentukan dengan mewarisi kelas MarkupExtension dan mengganti metode ProvidValue yang merupakan metode abstrak di kelas MarkupExtension.
Mari kita lihat contoh sederhana ekstensi markup kustom.
<Window x:Class = "XAMLMarkupExtension.MainWindow"
xmlns = "http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x = "http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:my = "clr-namespace:XAMLMarkupExtension"
Title = "MainWindow" Height = "350" Width = "525">
<Grid>
<Button Content = "{my:MyMarkupExtension FirstStr = Markup, SecondStr = Extension}"
Width = "200" Height = "20" />
</Grid>
</Window>
Dalam kode XAML di atas, tombol dibuat dengan beberapa properti dan untuk nilai konten, ekstensi markup khusus (my:MyMarkupExtension) telah digunakan dengan dua nilai "Markup" dan "Extension" yang masing-masing ditetapkan ke FirstStr dan SecondStr.
Sebenarnya, MyMarkupExtension
adalah kelas yang diturunkan dari MarkupExtension
seperti yang ditunjukkan di bawah ini dalam implementasi C #. Kelas ini berisi dua variabel string, FirstStr dan SecondStr, yang digabungkan dan mengembalikan string itu dari metode ProvidValue ke Isi tombol.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Markup;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
namespace XAMLMarkupExtension {
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window {
public MainWindow() {
InitializeComponent();
}
}
public class MyMarkupExtension : MarkupExtension {
public MyMarkupExtension() { }
public String FirstStr { get; set; }
public String SecondStr { get; set; }
public override object ProvideValue(IServiceProvider serviceProvider) {
return FirstStr + " " + SecondStr;
}
}
}
Mari jalankan aplikasi ini dan Anda dapat langsung melihat di Jendela Utama kami bahwa "ekstensi markup" telah berhasil digunakan sebagai konten tombol.