DependencyPropertyKey.OverrideMetadata(Type, PropertyMetadata) Methode

Definitie

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.

Van toepassing op

Zie ook