Nasıl yapılır: Bağımlılık Özelliği için Sahip Türü Ekleme
Bu örnekte, bir sınıfın farklı bir tür için kaydedilmiş bir bağımlılık özelliğinin sahibi olarak nasıl ekleneceği gösterilmektedir. Bunu yaparak WPF XAML okuyucusu ve özellik sistemi hem sınıfını özelliğin ek sahibi olarak tanıyabilir. Sahip olarak ekleme isteğe bağlı olarak, ekleme sınıfının türe özgü meta veriler sağlamasına olanak tanır.
Aşağıdaki örnekte, StateProperty
sınıfı tarafından MyStateControl
kaydedilen bir özelliktir. sınıfıUnrelatedStateControl
, özellikle ekleme türünde mevcut olduğu gibi bağımlılık özelliği için yeni meta veriler sağlayan imzayı kullanarak yöntemini kullanarak AddOwner kendisini öğesinin sahibi StateProperty
olarak ekler. Özellik için Bağımlılık Özelliği Uygulama örneğinde gösterilen örneğe benzer ortak dil çalışma zamanı (CLR) erişimcileri sağlamanız ve sahip olarak eklenen sınıfta bağımlılık özelliği tanımlayıcısını yeniden kullanıma sunmanız gerektiğine dikkat edin.
Sarmalayıcılar olmadan bağımlılık özelliği veya SetValuekullanarak GetValue programlı erişim açısından çalışmaya devam eder. Ancak genellikle bu özellik sistemi davranışını CLR özellik sarmalayıcılarıyla paralel hale getirmek istersiniz. Sarmalayıcılar bağımlılık özelliğini program aracılığıyla ayarlamayı kolaylaştırır ve özelliklerin XAML öznitelikleri olarak ayarlanmasını mümkün hale getirir.
Varsayılan meta verileri geçersiz kılmayı öğrenmek için bkz . Bağımlılık Özelliği için Meta Verileri Geçersiz Kılma.
Örnek
public class MyStateControl : ButtonBase
{
public MyStateControl() : base() { }
public Boolean State
{
get { return (Boolean)this.GetValue(StateProperty); }
set { this.SetValue(StateProperty, value); }
}
public static readonly DependencyProperty StateProperty = DependencyProperty.Register(
"State", typeof(Boolean), typeof(MyStateControl),new PropertyMetadata(false));
}
Public Class MyStateControl
Inherits ButtonBase
Public Sub New()
MyBase.New()
End Sub
Public Property State() As Boolean
Get
Return CType(Me.GetValue(StateProperty), Boolean)
End Get
Set(ByVal value As Boolean)
Me.SetValue(StateProperty, value)
End Set
End Property
Public Shared ReadOnly StateProperty As DependencyProperty = DependencyProperty.Register("State", GetType(Boolean), GetType(MyStateControl),New PropertyMetadata(False))
End Class
public class UnrelatedStateControl : Control
{
public UnrelatedStateControl() { }
public static readonly DependencyProperty StateProperty = MyStateControl.StateProperty.AddOwner(typeof(UnrelatedStateControl), new PropertyMetadata(true));
public Boolean State
{
get { return (Boolean)this.GetValue(StateProperty); }
set { this.SetValue(StateProperty, value); }
}
}
Public Class UnrelatedStateControl
Inherits Control
Public Sub New()
End Sub
Public Shared ReadOnly StateProperty As DependencyProperty = MyStateControl.StateProperty.AddOwner(GetType(UnrelatedStateControl), New PropertyMetadata(True))
Public Property State() As Boolean
Get
Return CType(Me.GetValue(StateProperty), Boolean)
End Get
Set(ByVal value As Boolean)
Me.SetValue(StateProperty, value)
End Set
End Property
End Class
Ayrıca bkz.
.NET Desktop feedback
Geri Bildirim
https://aka.ms/ContentUserFeedback.
Çok yakında: 2024 boyunca, içerik için geri bildirim mekanizması olarak GitHub Sorunları’nı kullanımdan kaldıracak ve yeni bir geri bildirim sistemiyle değiştireceğiz. Daha fazla bilgi için bkz.Gönderin ve geri bildirimi görüntüleyin