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
ochArrangeOverride
ger implementeringsspecifikt beteende och återgivningsinformation till layoutsystemet. NärAffectsArrange
,AffectsMeasure
ellerAffectsRender
anges tilltrue
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ändaIsNotDataBindable
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 baratrue
för vissa beroendeegenskaper, till exempel SelectedIndex. Användarindatakontroller bör ange flagganJournal
för egenskaper vars värden innehåller användarval som måste lagras. FlagganJournal
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:
Ställ in flaggorna för en instans av uppräkningsdatatypen FrameworkPropertyMetadataOptions.
FrameworkPropertyMetadataOptions
låter dig ange metadataflaggor i en bitvis eller-kombination. Instansiera sedanFrameworkPropertyMetadata
med hjälp av en konstruktor som har enFrameworkPropertyMetadataOptions
parameter och skicka in dinFrameworkPropertyMetadataOptions
-instans. Om du vill ändra metadataflaggor efter attFrameworkPropertyMetadataOptions
har ö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
FrameworkPropertyMetadata
med 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
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 flagganInherits
inställd, kommer standardvärdet från närmaste överordnade som har angettDefaultValue
i metadata.För en CoerceValueCallbackersätter det nya värdet ett befintligt
CoerceValueCallback
värde. Om du inte anger enCoerceValueCallback
i åsidosättningsmetadata kommer värdet från närmaste överordnade i arvskedjan som angav enCoerceValueCallback
.För
FrameworkPropertyMetadata
icke-ärvda flaggor kan du åsidosätta standardvärdetfalse
med etttrue
värde. Du kan dock bara åsidosätta etttrue
värde med ettfalse
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
- PropertyMetadata
- GetMetadata
- OverrideMetadata
- AddOwner
- metadata för beroendeegenskap
- Översikt över beroendeegenskaper
- Anpassade beroendeegenskaper
.NET Desktop feedback