DependencyPropertyKey.OverrideMetadata(Type, PropertyMetadata) Metod
Definition
Viktigt
En del information gäller för förhandsversionen av en produkt och kan komma att ändras avsevärt innan produkten blir allmänt tillgänglig. Microsoft lämnar inga garantier, uttryckliga eller underförstådda, avseende informationen som visas här.
Å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.