DependencyPropertyKey.OverrideMetadata(Type, PropertyMetadata) Metod

Definition

Åsidosätter metadata för en skrivskyddad beroendeegenskap som representeras av den här beroendeegenskapsidentifieraren.

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)

Parametrar

forType
Type

Den typ som den här beroendeegenskapen finns på och metadata ska åsidosättas.

typeMetadata
PropertyMetadata

Metadata som tillhandahålls för den här typen.

Undantag

Försök att åsidosätta metadata på en skrivskyddad beroendeegenskap (det går inte att göra med den här signaturen).

Metadata har redan upprättats för egenskapen eftersom den finns på den angivna typen.

Exempel

I följande exempel åsidosätts metadata för en befintlig skrivskyddad beroendeegenskap som en klass ärver. I det här fallet var scenariomålet att lägga till ett tvångsvärdeåteranrop som basegenskapens metadata inte hade. Du kan också åsidosätta metadata av någon av de andra orsakerna till att åsidosättande av metadata vanligtvis är lämpligt (ändra standardvärde, lägga till FrameworkPropertyMetadataOptions värden osv.)

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

Kommentarer

Att åsidosätta metadata för en skrivskyddad beroendeegenskap görs av liknande skäl som att åsidosätta metadata för en skrivskyddad beroendeegenskap och är begränsad till åtkomst på nyckelnivå eftersom beteenden som anges i metadata kan ändra det angivna beteendet (standardvärdet, till exempel).

Precis som med skrivskyddade beroendeegenskaper bör åsidosättande metadata för en skrivskyddad beroendeegenskap endast göras innan egenskapen används av egenskapssystemet (detta motsvarar den tid då specifika instanser av objekt som registrerar egenskapen instansieras). Anrop till OverrideMetadata bör endast utföras inom de statiska konstruktorerna av den typ som tillhandahåller sig själv som parameter för den forType här metoden eller motsvarande initiering för den klassen.

Den här metoden vidarebefordrar effektivt till OverrideMetadata metoden och skickar instansen DependencyPropertyKey som nyckelparameter.

Gäller för

Se även