Freigeben über


DependencyPropertyKey.OverrideMetadata(Type, PropertyMetadata) Methode

Definition

Überschreibt die Metadaten einer schreibgeschützten Abhängigkeitseigenschaft, die durch diesen Bezeichner einer Abhängigkeitseigenschaft dargestellt wird.

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)

Parameter

forType
Type

Der Typ, für den diese Abhängigkeitseigenschaft vorhanden ist, sowie die Metadaten müssen überschrieben werden.

typeMetadata
PropertyMetadata

Für diesen Typ angegebene Metadaten.

Ausnahmen

Versuchte Überschreibung von Metadaten für eine Abhängigkeitseigenschaft mit Schreib- und Leseberechtigungen (kann nicht mit dieser Signatur ausgeführt werden).

Metadaten wurden für die Eigenschaft bereits festgelegt, da sie im bereitgestellten Typ bereits vorhanden sind.

Beispiele

Im folgenden Beispiel werden Metadaten für eine vorhandene schreibgeschützte Abhängigkeitseigenschaft außer Kraft gesetzt, die eine Klasse erbt. In diesem Fall bestand das Szenarioziel darin, einen Rückruf des Coerce-Werts hinzuzufügen, über den die Basiseigenschaftenmetadaten nicht verfügen. Sie können Metadaten auch aus anderen Gründen außer Kraft setzen, aus denen Metadaten in der Regel überschrieben werden (Ändern des Standardwerts, Hinzufügen von FrameworkPropertyMetadataOptions Werten usw.)

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

Hinweise

Das Außerkraftsetzen von Metadaten für eine schreibgeschützte Abhängigkeitseigenschaft erfolgt aus ähnlichen Gründen wie das Außerkraftsetzen von Metadaten für eine Lese-Schreib-Abhängigkeitseigenschaft und ist auf den Zugriff auf die Schlüsselebene beschränkt, da verhaltensweisen, die in den Metadaten angegeben sind, das Setverhalten ändern können (z. B. der Standardwert).

Wie bei Lese-Schreib-Abhängigkeitseigenschaften sollte das Außerkraftsetzen von Metadaten für eine schreibgeschützte Abhängigkeitseigenschaft nur erfolgen, bevor diese Eigenschaft vom Eigenschaftensystem verwendet wird (dies entspricht dem Zeitpunkt, zu dem bestimmte Instanzen von Objekten, die die Eigenschaft registrieren, instanziiert werden). Aufrufe sollten OverrideMetadata nur innerhalb der statischen Konstruktoren des Typs ausgeführt werden, die sich als forType Parameter dieser Methode oder eine entsprechende Initialisierung für diese Klasse bereitstellt.

Diese Methode leitet die Methode effektiv an die OverrideMetadata Methode weiter, wobei die DependencyPropertyKey Instanz als Schlüsselparameter übergeben wird.

Gilt für

Siehe auch