DependencyPropertyKey.OverrideMetadata(Type, PropertyMetadata) Methode
Definitie
Belangrijk
Bepaalde informatie heeft betrekking op een voorlopige productversie die aanzienlijk kan worden gewijzigd voordat deze wordt uitgebracht. Microsoft biedt geen enkele expliciete of impliciete garanties met betrekking tot de informatie die hier wordt verstrekt.
Overschrijft de metagegevens van een alleen-lezen afhankelijkheidseigenschap die wordt vertegenwoordigd door deze afhankelijkheidseigenschaps-id.
public:
void OverrideMetadata(Type ^ forType, System::Windows::PropertyMetadata ^ typeMetadata);
public void OverrideMetadata(Type forType, System.Windows.PropertyMetadata typeMetadata);
member this.OverrideMetadata : Type * System.Windows.PropertyMetadata -> unit
Public Sub OverrideMetadata (forType As Type, typeMetadata As PropertyMetadata)
Parameters
- forType
- Type
Het type waarop deze afhankelijkheidseigenschap bestaat en metagegevens moeten worden overschreven.
- typeMetadata
- PropertyMetadata
Metagegevens die voor dit type worden opgegeven.
Uitzonderingen
Poging om metagegevens te overschrijven voor een eigenschap voor afhankelijkheid lezen/schrijven (kan niet worden uitgevoerd met deze handtekening).
Metagegevens zijn al gemaakt voor de eigenschap zoals deze bestaat op het opgegeven type.
Voorbeelden
In het volgende voorbeeld worden metagegevens voor een bestaande alleen-lezen afhankelijkheidseigenschap overschreven die een klasse overschrijft. In dit geval was het doel van het scenario om een terugbelwaarde van een coercewaarde toe te voegen die de metagegevens van de basiseigenschap niet hadden. U kunt metagegevens ook overschrijven om een van de andere redenen waarom het overschrijven van metagegevens doorgaans geschikt is (het wijzigen van de standaardwaarde, het toevoegen FrameworkPropertyMetadataOptions van waarden, enzovoort)
static Fishbowl() {
Aquarium.AquariumSizeKey.OverrideMetadata(
typeof(Aquarium),
new PropertyMetadata(
double.NaN,
null,
new CoerceValueCallback(CoerceFishbowlAquariumSize)
)
);
}
static object CoerceFishbowlAquariumSize(DependencyObject d,Object baseValue)
{
//Aquarium is 2D, a Fishbowl is a round Aquarium, so the Size we return is the ellipse of that height/width rather than the rectangle
Fishbowl fb = (Fishbowl)d;
//other constraints assure that H,W are positive
return Convert.ToInt32(Math.PI * (fb.Width / 2) * (fb.Height / 2));
}
Shared Sub New()
Aquarium.AquariumSizeKey.OverrideMetadata(GetType(Aquarium), New PropertyMetadata(Double.NaN, Nothing, New CoerceValueCallback(AddressOf CoerceFishbowlAquariumSize)))
End Sub
Private Shared Function CoerceFishbowlAquariumSize(ByVal d As DependencyObject, ByVal baseValue As Object) As Object
'Aquarium is 2D, a Fishbowl is a round Aquarium, so the Size we return is the ellipse of that height/width rather than the rectangle
Dim fb As Fishbowl = CType(d, Fishbowl)
'other constraints assure that H,W are positive
Return Convert.ToInt32(Math.PI * (fb.Width / 2) * (fb.Height / 2))
End Function
Opmerkingen
Het overschrijven van metagegevens voor een eigenschap alleen-lezenafhankelijkheid wordt uitgevoerd om vergelijkbare redenen als het overschrijven van metagegevens voor een eigenschap voor afhankelijkheid lezen en is beperkt tot toegang op sleutelniveau, omdat gedrag dat is opgegeven in de metagegevens, het ingestelde gedrag kan wijzigen (bijvoorbeeld de standaardwaarde).
Net als bij eigenschappen van afhankelijkheid lezen/schrijven, moet het overschrijven van metagegevens voor een alleen-lezen afhankelijkheidseigenschap alleen 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 moeten OverrideMetadata alleen worden uitgevoerd binnen de statische constructors van het type dat zichzelf als parameter forType van deze methode levert, of gelijkwaardige initialisatie voor die klasse.
Deze methode stuurt effectief door naar de OverrideMetadata methode, waarbij het DependencyPropertyKey exemplaar wordt doorgegeven als de sleutelparameter.