Dela via


Framework-egenskapsmetadata

Metadataalternativ för framework-egenskaper rapporteras för egenskaperna för objektelement som anses vara på WPF-ramverksnivå i WPF-arkitekturen (Windows Presentation Foundation). I allmänhet innebär att termen WPF vid ramverksnivån att funktioner som rendering, databindning och förbättringar av egenskapssystemet sköts av WPF-presentations-API:er och körbara filer. Framework-egenskapsmetadata efterfrågas av dessa system för att fastställa funktionsspecifika egenskaper för vissa elementegenskaper.

Förutsättningar

Det här avsnittet förutsätter att du förstår beroendeegenskaper från perspektivet hos en användare av befintliga beroendeegenskaper i klasser i Windows Presentation Foundation (WPF) och har läst översikten över beroendeegenskaper. Du bör också ha läst beroendeegenskapsmetadata.

Vad kommuniceras med framework-egenskapsmetadata

Framework-egenskapsmetadata kan delas in i följande kategorier:

  • Rapportlayoutegenskaper som påverkar ett element (AffectsArrange, AffectsMeasure, AffectsRender). Du kan ange dessa flaggor i metadata om egenskapen påverkar dessa aspekter och du även implementerar de MeasureOverride / ArrangeOverride metoderna i klassen för att tillhandahålla specifikt återgivningsbeteende och information till layoutsystemet. Vanligtvis skulle en sådan implementering söka efter ogiltigförklaringar av egenskaper i beroende egenskaper där någon av dessa layoutegenskaper är sanna i egenskapsmetadata, och endast de ogiltigförklaringarna skulle kräva att ett nytt layoutpass begäras.

  • Egenskaper för rapportlayout som påverkar föräldraelementet i ett element (AffectsParentArrange, AffectsParentMeasure). Några exempel där dessa flaggor anges som standard är FixedPage.Left och Paragraph.KeepWithNext.

  • Inherits. Beroendeegenskaper ärver som standard inte värden. OverridesInheritanceBehavior möjliggör att arvsvägen även kan färdas in i ett visuellt träd, vilket är nödvändigt i vissa scenarier för kontrollsammansättning.

    Notis

    Termen "ärver" i kontexten för egenskapsvärden innebär något specifikt för beroendeegenskaper. Det innebär att underordnade element kan ärva det faktiska beroendeegenskapsvärdet från överordnade element på grund av en WPF-ramnivåfunktion i WPF-egenskapssystemet. Det har inget att göra direkt med arv av hanterad kodtyp och medlemmar via härledda typer. För mer information, se arv av egenskapsvärde.

  • Rapportering av databindningsegenskaper (IsNotDataBindable, BindsTwoWayByDefault). Som standard stöder beroendeegenskaper i ramverket databindning, med ett envägsbindningsbeteende. Du kan inaktivera databindning om det inte finns något som helst scenario för den (eftersom de är avsedda att vara flexibla och utökningsbara finns det inte många exempel på sådana egenskaper i WPF-standard-API:erna). Du kan ange att bindningen ska ha en tvåvägsstandard för egenskaper som kopplar samman en kontrolls beteende mellan dess komponentdelar (IsSubmenuOpen är ett exempel) eller där dubbelriktad bindning är det vanliga och förväntade scenariot för användare (Text är ett exempel). Att ändra databindningsrelaterade metadata påverkar bara standardinställningen, men på individuell basis kan standarden alltid ändras. Mer information om bindningslägen och bindning i allmänhet finns i Översikt över databindning.

  • Rapportera om egenskaper ska journalföras av program eller tjänster som stöder journaler (Journal). För allmänna element är journalning inte aktiverat som standard, men det är selektivt aktiverat för vissa användarindatakontroller. Den här egenskapen är avsedd att läsas av journaltjänster, inklusive WPF-implementeringen av journaler, och är vanligtvis inställd på användarkontroller, till exempel användarval i listor som ska bevaras i navigeringsstegen. Mer information om journalen finns i Navigeringsöversikt.

Läsa FrameworkPropertyMetadata

Var och en av de egenskaper som är länkade ovan är de specifika egenskaper som FrameworkPropertyMetadata lägger till i den omedelbara basklassen UIPropertyMetadata. Var och en av dessa egenskaper är false som standard. En metadatabegäran för en egenskap där det är viktigt att känna till värdet för dessa egenskaper bör försöka omvandla de returnerade metadata till FrameworkPropertyMetadataoch sedan kontrollera värdena för de enskilda egenskaperna efter behov.

Ange metadata

När du skapar en ny metadatainstans för att tillämpa metadata på en ny beroendeegenskapsregistrering kan du välja vilken metadataklass som ska användas: bas-PropertyMetadata eller någon härledd klass, till exempel FrameworkPropertyMetadata. I allmänhet bör du använda FrameworkPropertyMetadata, särskilt om din egenskap har någon interaktion med egenskapssystem och WPF-funktioner som layout och databindning. Ett annat alternativ för mer avancerade scenarier är att härleda från FrameworkPropertyMetadata för att skapa din egen metadatarapporteringsklass med extra information som finns i dess medlemmar. Eller så kan du använda PropertyMetadata eller UIPropertyMetadata för att kommunicera graden av stöd för funktioner i implementeringen.

För befintliga egenskaper (AddOwner eller OverrideMetadata anrop) bör du alltid åsidosätta med den metadatatyp som användes av den ursprungliga registreringen.

Om du skapar en FrameworkPropertyMetadata instans finns det två sätt att fylla metadata med värden för de specifika egenskaper som kommunicerar ramverkets egenskapsegenskaper:

  1. Använd FrameworkPropertyMetadata konstruktorsignatur som tillåter en flags parameter. Den här parametern ska fyllas med alla önskade kombinerade värden för FrameworkPropertyMetadataOptions uppräkningsflaggor.

  2. Använd en av signaturerna utan en flags parameter, och ange sedan varje egenskap med booleskt värde på FrameworkPropertyMetadata till true för varje önskad egenskapsändring. Om du gör detta måste du ange dessa egenskaper innan några element med den här beroendeegenskapen skapas. De booleska egenskaperna är skrivskyddade för att det här beteendet ska kunna undvika flags-parametern och fortfarande fylla i metadata, men metadata måste förseglas effektivt innan egenskapen används. Det innebär att försök att ange egenskaperna efter att metadata har begärts är en ogiltig åtgärd.

Sammanslagningsbeteende för framework-egenskapsmetadata

När du åsidosätter framework-egenskapsmetadata sammanfogas eller ersätts de olika metadataegenskaperna.

Det här beteendet implementeras av Mergeoch kan åsidosättas för härledda metadataklasser.

Se även