Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
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
MeasureOverrideochArrangeOverrideger implementeringsspecifikt beteende och återgivningsinformation till layoutsystemet. NärAffectsArrange,AffectsMeasureellerAffectsRenderanges tilltruei 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 egenskapsvärdesarv .
Anmärkning
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.
BindsTwoWayByDefaultpåverkar endast standardbindningsläget. Om du vill redigera dataflödesriktningen för en bindning anger du Binding.Mode. Du kan användaIsNotDataBindablefö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 baratrueför vissa beroendeegenskaper, till exempel SelectedIndex. Användarindatakontroller bör ange flagganJournalför egenskaper vars värden innehåller användarval som måste lagras. FlagganJournallä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:
Ställ in flaggorna för en instans av uppräkningsdatatypen FrameworkPropertyMetadataOptions.
FrameworkPropertyMetadataOptionslåter dig ange metadataflaggor i en bitvis eller-kombination. Instansiera sedanFrameworkPropertyMetadatamed hjälp av en konstruktor som har enFrameworkPropertyMetadataOptionsparameter och skicka in dinFrameworkPropertyMetadataOptions-instans. Om du vill ändra metadataflaggor efter attFrameworkPropertyMetadataOptionshar överförts till FrameworkPropertyMetadata konstruktorn ändrar du motsvarande egenskap för den nyaFrameworkPropertyMetadata-instansen. Om du till exempel anger flaggan FrameworkPropertyMetadataOptions.NotDataBindable kan du ångra den genom att ange FrameworkPropertyMetadata.IsNotDataBindable tillfalse.Instansiera
FrameworkPropertyMetadatamed hjälp av en konstruktor som inte har enFrameworkPropertyMetadataOptions-parameter och ange sedan tillämpliga Boolean flaggor påFrameworkPropertyMetadata. Ange flaggvärden innan du associerar dinFrameworkPropertyMetadata-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
PropertyChangedCallbackvä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
DefaultValuei åsidosättningsmetadata och om den befintliga FrameworkPropertyMetadata har flagganInheritsinställd, kommer standardvärdet från närmaste överordnade som har angettDefaultValuei metadata.För en CoerceValueCallbackersätter det nya värdet ett befintligt
CoerceValueCallbackvärde. Om du inte anger enCoerceValueCallbacki åsidosättningsmetadata kommer värdet från närmaste överordnade i arvskedjan som angav enCoerceValueCallback.För
FrameworkPropertyMetadataicke-ärvda flaggor kan du åsidosätta standardvärdetfalsemed etttruevärde. Du kan dock bara åsidosätta etttruevärde med ettfalsevärde för Inherits, Journal, OverridesInheritanceBehavioroch SubPropertiesDoNotAffectRender.
Anmärkning
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
.NET Desktop feedback