WPF - Bağımlılık Özellikleri

WPF uygulamalarında bağımlılık özelliği, CLR özelliğini genişleten belirli bir özellik türüdür. WPF özellik sisteminde bulunan belirli işlevlerden yararlanır.

Bir bağımlılık özelliğini tanımlayan bir sınıf, DependencyObjectsınıf. XAML'de kullanılan UI denetimleri sınıfının çoğu,DependencyObject sınıf ve bağımlılık özelliklerini desteklerler, örneğin Button sınıfı, IsMouseOver bağımlılık özelliği.

Aşağıdaki XAML kodu, bazı özelliklere sahip bir düğme oluşturur.

<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>

XAML'deki x: Type işaretleme uzantısı, C # 'da typeof () gibi benzer bir işlevselliğe sahiptir. <Style TargetType = "{x: Type Button}"> gibi nesnenin türünü alan nitelikler belirtildiğinde kullanılır.

Yukarıdaki kod derlendiğinde ve çalıştırıldığında, aşağıdakileri alırsınız MainWindow. Fare düğmenin üzerindeyken, bir düğmenin ön plan rengini değiştirecektir. Fare düğmeyi terk ettiğinde, orijinal rengine geri döner.

Neden Bağımlılık Özelliklerine İhtiyacımız Var?

Bağımlılık özelliği, uygulamanızda kullandığınızda size her türlü faydayı sağlar. Bağımlılık Özelliği, aşağıdaki senaryolarda bir CLR özelliği üzerinde kullanılabilir -

  • Stili ayarlamak istiyorsanız
  • Veri bağlama istiyorsanız
  • Bir kaynakla (statik veya dinamik bir kaynak) ayarlamak istiyorsanız
  • Animasyonu desteklemek istiyorsanız

Temel olarak, Bağımlılık Özellikleri, bir CLR özelliği kullanarak elde edemeyeceğiniz birçok işlev sunar.

Arasındaki temel fark dependency properties ve diğeri CLR properties aşağıda listelenmiştir -

  • CLR özellikleri, bir sınıfın özel üyesinden aşağıdaki komutu kullanarak doğrudan okuyabilir / yazabilir: getter ve setter. Buna karşılık, bağımlılık özellikleri yerel nesnede depolanmaz.

  • Bağımlılık özellikleri, DependencyObject sınıfı tarafından sağlanan bir anahtar / değer çiftleri sözlüğünde saklanır. Ayrıca, değiştirildiğinde özelliği depoladığı için çok fazla bellek tasarrufu sağlar. XAML'de de bağlanabilir.

Özel Bağımlılık Özellikleri

.NET çerçevesinde, özel bağımlılık özellikleri de tanımlanabilir. C # 'da özel bağımlılık özelliğini tanımlamak için aşağıda verilen adımları izleyin.

  • Beyan edin ve kaydedin dependency property sistem çağrı kaydı ile.

  • Sağlamak setter ve getter mülkiyet için.

  • Tanımla static handler küresel olarak meydana gelen tüm değişiklikleri ele alacak

  • Tanımla instance handler o belirli durumda meydana gelen herhangi bir değişikliği ele alacaktır.

Aşağıdaki C # kodu, ayarlamak için bir bağımlılık özelliğini tanımlar. SetText kullanıcı kontrolünün özelliği.

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(); 
      }  
   } 
}

TextBlock'un bir kullanıcı denetimi olarak tanımlandığı ve Text özelliğinin SetText bağımlılığı özelliği tarafından kendisine atanacağı XAML dosyası burada verilmiştir.

Aşağıdaki XAML kodu bir kullanıcı denetimi oluşturur ve SetText bağımlılık özelliği.

<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>

Bu uygulamayı çalıştıralım. MainWindow'umuzda, kullanıcı kontrolü için bağımlılık özelliğinin bir Metin olarak başarıyla kullanıldığını hemen gözlemleyebilirsiniz.