DependencyPropertyKey.OverrideMetadata(Type, PropertyMetadata) Metoda

Definicja

Zastępuje metadane właściwości zależności tylko do odczytu reprezentowanej przez ten identyfikator właściwości zależności.

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)

Parametry

forType
Type

Typ, na którym istnieje ta właściwość zależności, a metadane powinny zostać zastąpione.

typeMetadata
PropertyMetadata

Metadane dostarczone dla tego typu.

Wyjątki

Podjęto próbę zastąpienia metadanych we właściwości zależności odczytu i zapisu (nie można tego zrobić przy użyciu tego podpisu).

Metadane zostały już ustanowione dla właściwości, ponieważ istnieje w podanym typie.

Przykłady

Poniższy przykład zastępuje metadane istniejącej właściwości zależności tylko do odczytu dziedziczonej przez klasę. W tym przypadku celem scenariusza było dodanie wywołania zwrotnego wartości coerce, że metadane właściwości podstawowej nie miały. Można również zastąpić metadane z innych powodów, dla których zastępowanie metadanych jest zazwyczaj odpowiednie (zmiana wartości domyślnej, dodawanie FrameworkPropertyMetadataOptions wartości itp.)

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

Uwagi

Zastępowanie metadanych we właściwości zależności tylko do odczytu odbywa się z podobnych powodów, ponieważ przesłanianie metadanych we właściwości zależności odczytu i zapisu jest ograniczone do dostępu na poziomie klucza, ponieważ zachowania określone w metadanych mogą zmienić zachowanie zestawu (na przykład wartość domyślna).

Podobnie jak we właściwościach zależności odczytu i zapisu, zastępowanie metadanych we właściwości zależności tylko do odczytu powinno odbywać się tylko przed umieszczeniem tej właściwości w użyciu przez system właściwości (jest to oznacza czas utworzenia wystąpienia określonych wystąpień obiektów rejestrujących właściwość). Wywołania metody OverrideMetadata do powinny być wykonywane tylko w konstruktorach statycznych typu, który podaje się jako forType parametr tej metody lub równoważne inicjowanie dla tej klasy.

Ta metoda skutecznie przekazuje dane do OverrideMetadata metody, przekazując DependencyPropertyKey wystąpienie jako parametr klucza.

Dotyczy

Zobacz też