Dela via


Framework-egenskapsmetadata (WPF .NET)

Du kan ange metadataalternativ för ramverksegenskap för beroendeegenskaper på ramverksnivå för Windows Presentation Foundation (WPF). WPF-ramverksnivåbeteckningen gäller när WPF-presentations-API:er och körbara filer hanterar rendering och databindning. Presentations-API:er och körbara filer anropar FrameworkPropertyMetadata hos en beroendeegenskap.

Förutsättningar

Artikeln förutsätter grundläggande kunskaper om beroendeegenskaper och att du har läst Översikt över beroendeegenskaper. Om du vill följa exemplen i den här artikeln hjälper det om du är bekant med XAML (Extensible Application Markup Language) och vet hur du skriver WPF-program.

Metadatakategorier för framework-egenskap

FrameworkPropertyMetadata ingår i följande kategorier:

  • Metadata som påverkar layouten för ett element, särskilt AffectsArrange, AffectsMeasureoch AffectsRender metadataflaggor. Du kan ange dessa flaggor om implementeringen av beroendeegenskapen påverkar en visuell aspekt och du implementerar MeasureOverride eller ArrangeOverride i klassen. Metoderna MeasureOverride och ArrangeOverride ger implementeringsspecifikt beteende och återgivningsinformation till layoutsystemet. När AffectsArrange, AffectsMeasureeller AffectsRender anges till true i metadata för en beroendeegenskap och dess effektiva värde ändras, kommer WPF-egenskapssystemet att initiera en begäran om att ogiltigförklara elementets visuella objekt för att utlösa en omritning.

  • Metadata som påverkar layouten för det överordnade elementet i ett element, särskilt AffectsParentArrange och AffectsParentMeasure metadataflaggor. Exempel på WPF-beroendeegenskaper som anger dessa flaggor är FixedPage.Left och Paragraph.KeepWithNext.

  • Metadata för arv av egenskapsvärde, särskilt Inherits- och OverridesInheritanceBehavior-metadataflaggor. Beroendeegenskaper ärver som standard inte värden. OverridesInheritanceBehavior gör att arvsvägen också kan föras in i ett visuellt träd, vilket är nödvändigt för vissa scenarier för kontrollkomponering. För mer information, se arv av egenskapsvärde.

    Anteckning

    Termen "ärver" i kontexten för egenskapsvärden är specifik för beroendeegenskaper och är inte direkt relaterad till hanterade kodtyper och medlemsarv via härledda typer. I samband med beroendeegenskaper innebär det att underordnade element kan ärva värden för beroendeegenskap från överordnade element.

  • Databindningsmetadata, särskilt metadataflaggor för BindsTwoWayByDefault och IsNotDataBindable. Som standard stöder beroendeegenskaper i WPF-ramverket enkelriktad bindning. Överväg att ange tvåvägsbindning som standard för egenskaper som rapporterar tillstånd och kan ändras av användaråtgärd, till exempel IsSelected. Överväg också att ange dubbelriktad bindning som standard när användare av en kontroll förväntar sig att en egenskap implementerar den, till exempel TextBox.Text. BindsTwoWayByDefault påverkar endast standardbindningsläget. Om du vill redigera dataflödesriktningen för en bindning anger du Binding.Mode. Du kan använda IsNotDataBindable för att inaktivera databindning när det inte finns något användningsfall för den. Mer information om databindningar finns i Översikt över databindning.

  • Journalföringsmetadata, särskilt flaggan Journal för metadata. Standardvärdet för flaggan Journal är bara true för vissa beroendeegenskaper, till exempel SelectedIndex. Användarindatakontroller bör ange flaggan Journal för egenskaper vars värden innehåller användarval som måste lagras. Flaggan Journal läses av program eller tjänster som stödjer journalföring, inklusive WPF-journaltjänster. Information om hur du lagrar navigeringssteg finns i Navigeringsöversikt.

FrameworkPropertyMetadata härleds direkt från UIPropertyMetadataoch implementerar flaggorna som beskrivs här. Om inte specifikt anges har FrameworkPropertyMetadata flaggor ett standardvärde på false.

Läser FrameworkPropertyMetadata

Om du vill hämta metadata för en beroendeegenskap anropar du GetMetadata för DependencyProperty-identifieraren. Anropet GetMetadata returnerar ett PropertyMetadata objekt. Om du behöver fråga ramverksmetadatavärdena, omvandla PropertyMetadata till FrameworkPropertyMetadata.

Angivelse av FrameworkPropertyMetadata

När du registrerar en beroendeegenskap kan du skapa och tilldela metadata till den. Metadataobjektet som du tilldelar kan vara PropertyMetadata eller någon av dess härledda klasser, till exempel FrameworkPropertyMetadata. Välj FrameworkPropertyMetadata för beroendeegenskaper som förlitar sig på WPF-presentations-API:er och körbara filer för rendering och databindning. Ett mer avancerat alternativ är att härleda från FrameworkPropertyMetadata för att skapa en anpassad metadatarapporteringsklass med fler flaggor. Eller så kan du använda UIPropertyMetadata för icke-ramverksegenskaper som påverkar användargränssnittsrendering.

Även om metadataalternativ vanligtvis anges när en ny egenskap med beroende registreras kan du ange dem på nytt i OverrideMetadata eller AddOwner anrop. När du åsidosätter metadata åsidosätter du alltid med samma metadatatyp som användes under egenskapsregistreringen.

Egenskaper som exponeras av FrameworkPropertyMetadata kallas ibland flaggor. Om du skapar en FrameworkPropertyMetadata instans finns det två sätt att fylla i flaggvärden:

  1. Ställ in flaggorna för en instans av uppräkningsdatatypen FrameworkPropertyMetadataOptions. FrameworkPropertyMetadataOptions låter dig ange metadataflaggor i en bitvis eller-kombination. Instansiera sedan FrameworkPropertyMetadata med hjälp av en konstruktor som har en FrameworkPropertyMetadataOptions parameter och skicka in din FrameworkPropertyMetadataOptions-instans. Om du vill ändra metadataflaggor efter att FrameworkPropertyMetadataOptions har överförts till FrameworkPropertyMetadata konstruktorn ändrar du motsvarande egenskap för den nya FrameworkPropertyMetadata-instansen. Om du till exempel anger flaggan FrameworkPropertyMetadataOptions.NotDataBindable kan du ångra den genom att ange FrameworkPropertyMetadata.IsNotDataBindable till false.

  2. Instansiera FrameworkPropertyMetadata med hjälp av en konstruktor som inte har en FrameworkPropertyMetadataOptions-parameter och ange sedan tillämpliga Boolean flaggor på FrameworkPropertyMetadata. Ange flaggvärden innan du associerar din FrameworkPropertyMetadata-instans med en beroendeegenskap, annars får du en InvalidOperationException.

Beteende för åsidosättning av metadata

När du åsidosätter framework-egenskapsmetadata ersätter eller sammanfogas ändrade metadatavärden med de ursprungliga värdena:

  • För en PropertyChangedCallbackbehåller standardsammanslagningslogik tidigare PropertyChangedCallback värden i en tabell och alla anropas vid en egenskapsändring. Återanropsordningen bestäms av klassdjupet, där ett återanrop som registrerats av basklassen i hierarkin körs först. Ärvda återanrop körs bara en gång och de ägs av klassen som lade till dem i metadata.

  • För en DefaultValueersätter det nya värdet det befintliga standardvärdet. Om du inte anger en DefaultValue i åsidosättningsmetadata och om den befintliga FrameworkPropertyMetadata har flaggan Inherits inställd, kommer standardvärdet från närmaste överordnade som har angett DefaultValue i metadata.

  • För en CoerceValueCallbackersätter det nya värdet ett befintligt CoerceValueCallback värde. Om du inte anger en CoerceValueCallback i åsidosättningsmetadata kommer värdet från närmaste överordnade i arvskedjan som angav en CoerceValueCallback.

  • För FrameworkPropertyMetadata icke-ärvda flaggor kan du åsidosätta standardvärdet false med ett true värde. Du kan dock bara åsidosätta ett true värde med ett false värde för Inherits, Journal, OverridesInheritanceBehavioroch SubPropertiesDoNotAffectRender.

Not

Standardsammanfogningslogik implementeras med metoden Merge. Du kan ange anpassad kopplingslogik i en härledd klass som ärver en beroendeegenskap genom att åsidosätta Merge i den klassen.

Se även