WPF - Properti Ketergantungan

Dalam aplikasi WPF, properti ketergantungan adalah jenis properti tertentu yang memperluas properti CLR. Ini mengambil keuntungan dari fungsionalitas spesifik yang tersedia di sistem properti WPF.

Kelas yang mendefinisikan properti ketergantungan harus diwarisi dari DependencyObjectkelas. Banyak kelas kontrol UI yang digunakan di XAML diturunkan dariDependencyObject kelas dan mereka mendukung properti ketergantungan, misalnya kelas Tombol mendukung IsMouseOver properti ketergantungan.

Kode XAML berikut membuat tombol dengan beberapa properti.

<Window x:Class = "WPFDependencyProperty.MainWindow" 
   xmlns = "http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
   xmlns:x = "http://schemas.microsoft.com/winfx/2006/xaml" 
   xmlns:local = "clr-namespace:WPFDependencyProperty"
   Title = "MainWindow" Height = "350" Width = "604"> 
	
   <Grid> 
      <Button  Height = "40" Width = "175" Margin = "10" Content = "Dependency Property"> 
         <Button.Style> 
            <Style TargetType = "{x:Type Button}"> 
               <Style.Triggers> 
					
                  <Trigger Property = "IsMouseOver" Value = "True"> 
                     <Setter Property = "Foreground" Value = "Red" /> 
                  </Trigger>
						
               </Style.Triggers>
            </Style> 
         </Button.Style> 
      </Button> 
   </Grid> 
	
</Window>

Ekstensi x: Type markup di XAML memiliki fungsi serupa seperti typeof () di C #. Ini digunakan ketika atribut ditentukan yang mengambil tipe objek seperti <Style TargetType = "{x: Type Button}">

Ketika kode di atas dikompilasi dan dijalankan, Anda akan mendapatkan yang berikut ini MainWindow. Saat mouse berada di atas tombol, warna latar depan tombol akan berubah. Saat mouse meninggalkan tombol, itu berubah kembali ke warna aslinya.

Mengapa Kita Membutuhkan Properti Ketergantungan

Properti ketergantungan memberi Anda semua jenis manfaat saat Anda menggunakannya dalam aplikasi Anda. Properti Ketergantungan dapat digunakan melalui properti CLR dalam skenario berikut -

  • Jika Anda ingin mengatur gaya
  • Jika Anda ingin data binding
  • Jika Anda ingin menyetel dengan sumber daya (sumber daya statis atau dinamis)
  • Jika Anda ingin mendukung animasi

Pada dasarnya, Properti Ketergantungan menawarkan banyak fungsi yang tidak akan Anda dapatkan dengan menggunakan properti CLR.

Perbedaan utama antara dependency properties dan lainnya CLR properties tercantum di bawah -

  • Properti CLR bisa langsung membaca / menulis dari anggota privat kelas dengan menggunakan getter dan setter. Sebaliknya, properti ketergantungan tidak disimpan di objek lokal.

  • Properti dependensi disimpan dalam kamus pasangan kunci / nilai yang disediakan oleh kelas DependencyObject. Ini juga menghemat banyak memori karena menyimpan properti saat diubah. Itu bisa diikat di XAML juga.

Properti Ketergantungan Kustom

Dalam kerangka .NET, properti ketergantungan kustom juga dapat ditentukan. Ikuti langkah-langkah yang diberikan di bawah ini untuk menentukan properti ketergantungan kustom di C #.

  • Nyatakan dan daftarkan dependency property dengan register panggilan sistem.

  • Menyediakan setter dan getter untuk properti.

  • Tentukan a static handler yang akan menangani setiap perubahan yang terjadi secara global

  • Definisikan instance handler yang akan menangani setiap perubahan yang terjadi pada contoh khusus tersebut.

Kode C # berikut mendefinisikan properti ketergantungan untuk menyetel SetText properti dari kontrol pengguna.

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.Media; 
using System.Windows.Media.Imaging; 
using System.Windows.Navigation; 
using System.Windows.Shapes;  

namespace WpfApplication3 { 
   /// <summary> 
      /// Interaction logic for UserControl1.xaml 
   /// </summary> 
	
   public partial class UserControl1 : UserControl { 
	
      public UserControl1() { 
         InitializeComponent(); 
      }
		
      public static readonly DependencyProperty SetTextProperty = 
         DependencyProperty.Register("SetText", typeof(string), typeof(UserControl1), new 
            PropertyMetadata("", new PropertyChangedCallback(OnSetTextChanged))); 
				
      public string SetText { 
         get { return (string)GetValue(SetTextProperty); } 
         set { SetValue(SetTextProperty, value); } 
      } 
		
      private static void OnSetTextChanged(DependencyObject d,
         DependencyPropertyChangedEventArgs e) { 
         UserControl1 UserControl1Control = d as UserControl1; 
         UserControl1Control.OnSetTextChanged(e); 
      } 
		
      private void OnSetTextChanged(DependencyPropertyChangedEventArgs e) { 
         tbTest.Text = e.NewValue.ToString(); 
      }  
   } 
}

Berikut adalah file XAML di mana TextBlock didefinisikan sebagai kontrol pengguna dan properti Teks akan ditetapkan padanya oleh properti ketergantungan SetText.

Kode XAML berikut membuat kontrol pengguna dan menginisialisasi SetText properti ketergantungan.

<Window x:Class = "WpfApplication3.MainWindow" 
   xmlns = "http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
   xmlns:x = "http://schemas.microsoft.com/winfx/2006/xaml" 
   xmlns:views = "clr-namespace:WpfApplication3"
   Title = "MainWindow" Height = "350" Width = "604"> 
	
   <Grid> 
      <views:UserControl1 SetText = "Hellow World"/> 
   </Grid> 
	
</Window>

Ayo jalankan aplikasi ini. Anda dapat segera mengamati bahwa di MainWindow kami, properti ketergantungan untuk kontrol pengguna telah berhasil digunakan sebagai Teks.