Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
In dit voorbeeld ziet u hoe u metagegevens van standaardafhankelijkheidseigenschappen overschrijft die afkomstig zijn van een overgenomen klasse door de OverrideMetadata methode aan te roepen en typespecifieke metagegevens op te geven.
Voorbeeld
Door de PropertyMetadatate definiëren, kan een klasse het gedrag van de afhankelijkheidseigenschap definiëren, zoals de standaardwaarde en callbacks van het eigenschappensysteem. Veel afhankelijkheidseigenschapsklassen hebben al standaardmetagegevens ingesteld als onderdeel van hun registratieproces. Dit omvat de afhankelijkheidseigenschappen die deel uitmaken van de WPF-API. Een klasse die de afhankelijkheidseigenschap overneemt via de overname van klassen, kan de oorspronkelijke metagegevens overschrijven, zodat de kenmerken van de eigenschap die via metagegevens kunnen worden gewijzigd, overeenkomen met eventuele subklassespecifieke vereisten.
Het overschrijven van metagegevens voor een afhankelijkheidseigenschap moet worden uitgevoerd voordat die eigenschap wordt gebruikt door het eigenschappensysteem (dit komt overeen met het tijdstip waarop specifieke exemplaren van objecten die de eigenschap registreren, worden geïnstantieerd). Aanroepen naar OverrideMetadata moeten worden uitgevoerd binnen de statische constructors van het type dat zichzelf levert als de parameter forType
van OverrideMetadata. Als u probeert metagegevens te wijzigen zodra er exemplaren van het type eigenaar bestaan, worden er geen uitzonderingen gegenereerd, maar leidt dit tot inconsistent gedrag in het eigenschappensysteem. Metagegevens kunnen ook slechts eenmaal per type worden overschreven. Bij volgende pogingen om metagegevens voor hetzelfde type te overschrijven, wordt een uitzondering gegenereerd.
In het volgende voorbeeld overschrijft de aangepaste klasse MyAdvancedStateControl
de metagegevens die zijn opgegeven voor StateProperty
door MyStateControl
met nieuwe eigenschappenmetagegevens. De standaardwaarde van de StateProperty
wordt nu bijvoorbeeld true
wanneer de eigenschap wordt opgevraagd op een nieuw MyAdvancedStateControl
exemplaar.
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
Zie ook
.NET Desktop feedback