DependencyPropertyKey.OverrideMetadata(Type, PropertyMetadata) Metoda
Definicja
Ważne
Niektóre informacje odnoszą się do produktu w wersji wstępnej, który może zostać znacząco zmodyfikowany przed wydaniem. Firma Microsoft nie udziela żadnych gwarancji, jawnych lub domniemanych, w odniesieniu do informacji podanych w tym miejscu.
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.