Nasıl yapılır: Bağımlılık Özelliği için Meta Verileri Geçersiz Kılma
Bu örnekte, yöntemini çağırarak ve türe özgü meta veriler sağlayarak devralınan bir sınıftan gelen varsayılan bağımlılık özelliği meta verilerinin OverrideMetadata nasıl geçersiz kılındığı gösterilir.
Örnek
sınıfı, öğesini PropertyMetadatatanımlayarak bağımlılık özelliğinin varsayılan değeri ve özellik sistemi geri çağırmaları gibi davranışlarını tanımlayabilir. Birçok bağımlılık özelliği sınıfı, kayıt işlemlerinin bir parçası olarak önceden oluşturulmuş varsayılan meta verilerine sahiptir. Bu, WPF API'sinin parçası olan bağımlılık özelliklerini içerir. Bağımlılık özelliğini sınıf devralma yoluyla devralan bir sınıf, özgün meta verileri geçersiz kılabilir, böylece meta veriler aracılığıyla değiştirilebilen özelliğin özellikleri alt sınıfa özgü gereksinimlerle eşleşecektir.
Bir bağımlılık özelliğindeki meta verilerin geçersiz kılınması, bu özelliğin özellik sistemi tarafından kullanılmadan önce yapılması gerekir (bu, özelliği kaydeden nesnelerin belirli örneklerinin örneği oluşturma zamanına eşit olur). çağrısıOverrideMetadata, parametresi OverrideMetadataolarak forType
kendisini sağlayan türün statik oluşturucuları içinde gerçekleştirilmelidir. Sahip türü örnekleri mevcut olduğunda meta verileri değiştirmeye çalışırsanız, bu özel durum oluşturmaz, ancak özellik sisteminde tutarsız davranışlara neden olur. Ayrıca meta veriler tür başına yalnızca bir kez geçersiz kılınabilir. Aynı türdeki meta verileri geçersiz kılmaya yönelik sonraki girişimler özel durum oluşturur.
Aşağıdaki örnekte, özel sınıf MyAdvancedStateControl
tarafından sağlanan StateProperty
MyStateControl
meta verileri yeni özellik meta verileriyle geçersiz kılar. Örneğin, özelliğinin StateProperty
varsayılan değeri artık true
özelliği yeni yapılandırılmış MyAdvancedStateControl
bir örnekte sorgulandığında olur.
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 MyAdvancedStateControl : MyStateControl
{
public MyAdvancedStateControl() : base() { }
static MyAdvancedStateControl()
{
MyStateControl.StateProperty.OverrideMetadata(typeof(MyAdvancedStateControl), new PropertyMetadata(true));
}
}
Public Class MyAdvancedStateControl
Inherits MyStateControl
Public Sub New()
MyBase.New()
End Sub
Shared Sub New()
MyStateControl.StateProperty.OverrideMetadata(GetType(MyAdvancedStateControl), New PropertyMetadata(True))
End Sub
End Class
Ayrıca bkz.
.NET Desktop feedback