Postupy: Přidání typu vlastníka pro vlastnost závislosti
Tento příklad ukazuje, jak přidat třídu jako vlastníka vlastnosti závislosti zaregistrované pro jiný typ. Tímto způsobem dokáže čtečka WPF XAML a systém vlastností rozpoznat třídu jako dalšího vlastníka vlastnosti. Přidání jako vlastníka volitelně umožňuje přidání třídy poskytnout metadata specifická pro typ.
V následujícím příkladu StateProperty
je vlastnost registrovaná MyStateControl
třídou. Třída UnrelatedStateControl
se přidá jako vlastník StateProperty
metody AddOwner , konkrétně pomocí podpisu, který umožňuje nová metadata pro vlastnost závislosti, jak existuje u typu přidání. Všimněte si, že byste měli zadat přístupové objekty CLR (Common Language Runtime) pro vlastnost podobnou příkladu uvedenému v příkladu Implementace vlastnosti závislosti a také znovu zveřejnit identifikátor vlastnosti závislosti na třídě, která je přidána jako vlastník.
Bez obálky by vlastnost závislosti stále fungovala z hlediska programového přístupu pomocí GetValue nebo SetValue. Obvykle ale chcete paralelně provádět toto chování systému vlastností pomocí obálky vlastností CLR. Obálky usnadňují programové nastavení vlastnosti závislosti a umožňují nastavit vlastnosti jako atributy XAML.
Informace o přepsání výchozích metadat najdete v tématu Přepsání metadat pro vlastnost závislosti.
Příklad
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
Viz také
.NET Desktop feedback