Metagegevens van frameworkeigenschap
Opties voor metagegevens van framework-eigenschappen worden gerapporteerd voor de eigenschappen van objectelementen die worden beschouwd als op het niveau van het WPF-framework in de WPF-architectuur (Windows Presentation Foundation). In het algemeen houdt de aanduiding op WPF-frameworkniveau in dat functies zoals rendering, gegevensbinding en verfijningen van eigenschappensysteem worden verwerkt door de WPF-presentatie-API's en uitvoerbare bestanden. Metagegevens van framework-eigenschappen worden door deze systemen opgevraagd om functiespecifieke kenmerken van bepaalde elementeigenschappen te bepalen.
Voorwaarden
In dit onderwerp wordt ervan uitgegaan dat u afhankelijkheidseigenschappen begrijpt vanuit het perspectief van een consument van bestaande afhankelijkheidseigenschappen in WPF-klassen (Windows Presentation Foundation) en dat u het overzicht van afhankelijkheidseigenschappen hebt gelezen. Je zou ook Metagegevens van Afhankelijkheidseigenschappenmoeten hebben gelezen.
Wat communiceren de metagegevens van een frameworkeigenschap
Metagegevens van framework-eigenschappen kunnen worden onderverdeeld in de volgende categorieën:
Rapportindelingseigenschappen die van invloed zijn op een element (AffectsArrange, AffectsMeasure, AffectsRender). U kunt deze vlaggen instellen in metagegevens als de eigenschap van invloed is op die respectieve aspecten, en u implementeert ook de MeasureOverride / ArrangeOverride methoden in uw klasse om specifiek weergavegedrag en informatie op te geven aan het indelingssysteem. Normaal gesproken zou een dergelijke implementatie controleren op ongeldige eigenschappen van eigenschappen in afhankelijkheidseigenschappen waarbij een van deze indelingseigenschappen waar was in de metagegevens van de eigenschap en alleen die ongeldigheden een nieuwe indelingspas vereisen.
Rapportindelingseigenschappen die van invloed zijn op het bovenliggende element van een element (AffectsParentArrange, AffectsParentMeasure). Enkele voorbeelden waarbij deze vlaggen standaard zijn ingesteld, zijn FixedPage.Left en Paragraph.KeepWithNext.
Inherits. Afhankelijkheidseigenschappen nemen standaard geen waarden over. OverridesInheritanceBehavior staat toe dat het overnamepad ook in een visuele boom terechtkomt, wat nodig is voor sommige scenario's van controlecompositie.
Notitie
De term 'neemt' over in de context van eigenschapswaarden betekent iets specifieks voor afhankelijkheidseigenschappen; dit betekent dat onderliggende elementen de werkelijke waarde van de afhankelijkheidseigenschap kunnen overnemen van bovenliggende elementen vanwege een WPF-frameworkfunctionaliteit van het WPF-eigenschappensysteem. Het heeft niets rechtstreeks te maken met het type beheerde code en de overerving van leden via afgeleide typen. Zie overname van eigenschapswaardenvoor details.
Kenmerken van gegevensbinding bij rapportage (IsNotDataBindable, BindsTwoWayByDefault). Afhankelijkheidseigenschappen in het framework ondersteunen standaard gegevensbinding, met een eenrichtingsbindingsgedrag. U kunt gegevensbinding uitschakelen als er geen scenario voor is (omdat ze flexibel en uitbreidbaar zijn, zijn er niet veel voorbeelden van dergelijke eigenschappen in de standaard WPF-API's). U kunt binding instellen op een standaardinstelling in twee richtingen voor eigenschappen die het gedrag van een besturingselement verbinden tussen de onderdelen (IsSubmenuOpen is een voorbeeld) of waarbij binding in twee richtingen het algemene en verwachte scenario is voor gebruikers (Text een voorbeeld is). Het wijzigen van de aan gegevensbinding gerelateerde metagegevens heeft alleen invloed op de standaardwaarde; op basis van een binding kan de standaardwaarde altijd worden gewijzigd. Zie Overzicht van gegevensbindingenvoor meer informatie over de bindingsmodi en bindingen in het algemeen.
Rapporteren of eigenschappen moeten worden geregistreerd door toepassingen of services die ondersteuning bieden voor logboekopname (Journal). Voor algemene elementen is logboekregistratie niet standaard ingeschakeld, maar is het selectief ingeschakeld voor bepaalde gebruikersinvoerelementen. Deze eigenschap is bedoeld om te worden gelezen door logboekservices, waaronder de WPF-implementatie van logboeken, en is meestal ingesteld op gebruikersbesturingselementen, zoals gebruikersselecties in lijsten die moeten worden bewaard tijdens navigatiestappen. Zie Navigatieoverzichtvoor meer informatie over het logboek.
Lezen van FrameworkPropertyMetadata
Elk van de bovenstaande eigenschappen zijn de specifieke eigenschappen die de FrameworkPropertyMetadata toevoegt aan de directe basisklasse UIPropertyMetadata. Elk van deze eigenschappen wordt standaard false
. Een metagegevensaanvraag voor een eigenschap waarbij de waarde van deze eigenschappen belangrijk is, moet proberen de geretourneerde metagegevens naar FrameworkPropertyMetadatate casten en vervolgens de waarden van de afzonderlijke eigenschappen indien nodig controleren.
Metagegevens opgeven
Wanneer u een nieuw metagegevensexemplaren maakt voor het toepassen van metagegevens op een nieuwe registratie van afhankelijkheidseigenschappen, kunt u kiezen welke metagegevensklasse moet worden gebruikt: de basisklasse PropertyMetadata of een bepaalde afgeleide klasse, zoals FrameworkPropertyMetadata. Over het algemeen moet u FrameworkPropertyMetadatagebruiken, met name als uw eigenschap interactie heeft met eigenschappensysteem en WPF-functies zoals indeling en gegevensbinding. Een andere optie voor geavanceerdere scenario's is het afleiden van FrameworkPropertyMetadata om uw eigen klasse voor metagegevensrapportage te maken met extra informatie die in de leden wordt meegenomen. Of u kunt PropertyMetadata of UIPropertyMetadata gebruiken om de mate van ondersteuning voor functies van uw implementatie te communiceren.
Voor bestaande eigenschappen (AddOwner of OverrideMetadata aanroepen) moet u altijd overschrijven met het metagegevenstype dat door de oorspronkelijke registratie wordt gebruikt.
Als u een FrameworkPropertyMetadata exemplaar maakt, zijn er twee manieren om die metagegevens te vullen met waarden voor de specifieke eigenschappen die de eigenschappen van het framework communiceren:
Gebruik de FrameworkPropertyMetadata constructorhandtekening die een
flags
parameter toestaat. Deze parameter moet worden gevuld met alle gewenste gecombineerde waarden van de FrameworkPropertyMetadataOptions opsommingsvlagmen.Gebruik een van de handtekeningen zonder een parameter
flags
en stel vervolgens elke booleaanse rapporteigenschap in op FrameworkPropertyMetadata om tetrue
voor elke gewenste kenmerkwijziging. Als u dit doet, moet u deze eigenschappen instellen voordat elementen met deze afhankelijkheidseigenschap worden samengesteld; de Booleaanse eigenschappen zijn lezen/schrijven om dit gedrag mogelijk te maken om de parameterflags
te vermijden en nog steeds de metagegevens te vullen, maar de metagegevens moeten effectief worden verzegeld voordat de eigenschap wordt gebruikt. Het instellen van de eigenschappen nadat metagegevens zijn aangevraagd, is dus een ongeldige bewerking.
Gedrag van het samenvoegen van metagegevens van framework-eigenschappen
Wanneer u metagegevens van frameworkeigenschappen overschrijft, worden de verschillende metagegevenskenmerken samengevoegd of vervangen.
PropertyChangedCallback wordt samengevoegd. Als u een nieuwe PropertyChangedCallbacktoevoegt, wordt die callback opgeslagen in de metagegevens. Als u geen PropertyChangedCallback opgeeft in de overschrijving, wordt de waarde van PropertyChangedCallback als verwijzing gepromoveerd van de dichtstbijzijnde bovenliggende waarde die deze heeft opgegeven in metagegevens.
Het werkelijke gedrag van het eigenschappensysteem voor PropertyChangedCallback is dat implementaties voor alle eigenaren van metagegevens in de hiërarchie worden bewaard en toegevoegd aan een tabel, waarbij de volgorde van uitvoering door het eigenschappensysteem is dat de callbacks van de meest diep afgeleide klasse eerst worden aangeroepen. Overgenomen callbacks worden slechts één keer uitgevoerd, waarbij wordt geteld dat ze eigendom zijn van de klasse die ze in metagegevens heeft geplaatst.
DefaultValue wordt vervangen. Als u geen PropertyChangedCallback opgeeft in de override, is de waarde van DefaultValue afkomstig van de dichtstbijzijnde bovenliggende voorouder die het in de metadata heeft opgegeven.
CoerceValueCallback implementaties worden vervangen. Als u een nieuwe CoerceValueCallbacktoevoegt, wordt die callback opgeslagen in de metagegevens. Als u geen CoerceValueCallback opgeeft in de override, wordt de waarde van CoerceValueCallback gebruikt als referentie van de dichtstbijzijnde bovenliggende entiteit die deze in metagegevens heeft opgegeven.
Het gedrag van het eigenschappensysteem is dat alleen de CoerceValueCallback in de onmiddellijke metagegevens wordt aangeroepen. Er worden geen verwijzingen naar andere CoerceValueCallback-implementaties in de hiërarchie bewaard.
De vlaggen van FrameworkPropertyMetadataOptions opsomming worden gecombineerd als een bitsgewijze OR-bewerking. Als u FrameworkPropertyMetadataOptionsopgeeft, worden de oorspronkelijke opties niet overschreven. Als u een optie wilt wijzigen, stelt u de bijbehorende eigenschap in op FrameworkPropertyMetadata. Als het oorspronkelijke FrameworkPropertyMetadata object bijvoorbeeld de vlag FrameworkPropertyMetadataOptions.NotDataBindable instelt, kunt u dit wijzigen door FrameworkPropertyMetadata.IsNotDataBindable in te stellen op
false
.
Dit gedrag wordt geïmplementeerd door Mergeen kan worden overschreven op afgeleide metagegevensklassen.
Zie ook
.NET Desktop feedback