Metadati delle proprietà del framework
Le opzioni dei metadati delle proprietà del framework vengono segnalate per le proprietà degli elementi oggetto considerate a livello di framework WPF nell'architettura di Windows Presentation Foundation (WPF). In generale, la designazione a livello di framework WPF comporta che le funzionalità come il rendering, il data binding e i perfezionamenti del sistema di proprietà vengono gestiti dalle API di presentazione WPF e dai file eseguibili. Questi sistemi eseguono una query sui metadati delle proprietà del framework per determinare le caratteristiche specifiche delle funzionalità di particolari proprietà dell'elemento.
Prerequisiti
In questo argomento si presuppone che si comprendano le proprietà di dipendenza dal punto di vista di un consumer di proprietà di dipendenza esistenti nelle classi Windows Presentation Foundation (WPF) e che siano state lette le informazioni generali sulle proprietà di dipendenza. È inoltre necessario aver letto l'argomento Metadati delle proprietà di dipendenza.
Contenuto dei metadati delle proprietà del framework
I metadati delle proprietà del framework possono essere suddivisi nelle seguenti categorie:
Creazione di report sulle proprietà di layout che influiscono su un elemento (AffectsArrange, AffectsMeasure, AffectsRender). È possibile impostare questi flag nei metadati se la proprietà influisce sui rispettivi aspetti e si implementano anche i MeasureOverride / ArrangeOverride metodi nella classe per fornire informazioni e comportamenti di rendering specifici al sistema di layout. In genere, tale implementazione verificherebbe le convalide delle proprietà nelle proprietà di dipendenza, qualora una di tali proprietà di layout risultasse impostata su true nei metadati della proprietà; solo tali convalide richiederebbero un nuovo passaggio di layout.
Creazione di report sulle proprietà del layout che influiscono sull'elemento padre di un elemento (AffectsParentArrange, AffectsParentMeasure). Alcuni esempi in cui questi flag vengono impostati per impostazione predefinita sono FixedPage.Left e Paragraph.KeepWithNext.
Inherits. Per impostazione predefinita, le proprietà di dipendenza non ereditano valori. OverridesInheritanceBehavior consente al percorso di ereditarietà di spostarsi anche in una struttura ad albero visuale, necessaria per alcuni scenari di composizione dei controlli.
Nota
Il termine "eredita" nel contesto dei valori delle proprietà significa qualcosa di specifico per le proprietà di dipendenza; significa che gli elementi figlio possono ereditare il valore effettivo della proprietà di dipendenza dagli elementi padre a causa di una funzionalità a livello di framework WPF del sistema di proprietà WPF. Non è correlato direttamente al tipo di codice gestito né all'ereditarietà dei membri tramite tipi derivati. Per informazioni dettagliate, vedere Ereditarietà del valore della proprietà.
Creazione di report sulle caratteristiche del data binding (IsNotDataBindable, BindsTwoWayByDefault). Per impostazione predefinita, le proprietà di dipendenza nel framework supportano il data binding, con un comportamento di associazione unidirezionale. È possibile disabilitare il data binding se non esiste alcuno scenario (perché sono destinati a essere flessibili ed estendibili, non esistono molti esempi di tali proprietà nelle API WPF predefinite). È possibile impostare l'associazione in modo che abbia un valore predefinito bidirezionale per le proprietà che associano i comportamenti di un controllo tra le parti del componente (IsSubmenuOpen è un esempio) o dove l'associazione bidirezionale è lo scenario comune e previsto per gli utenti (Text è un esempio). La modifica dei metadati correlati al data binding ha effetto sull'impostazione predefinita. È sempre possibile modificare l'impostazione predefinita per una singola associazione. Per maggiori dettagli sulle modalità di associazione e sull'associazione in generale, vedere Cenni preliminari sull'associazione dati.
Creazione di report che indicano se le proprietà devono essere inserite nel journal da applicazioni o servizi che supportano il journaling (Journal). Per impostazione predefinita, l'inserimento nel giornale di registrazione non è abilitato per gli elementi generali, ma è abilitato in maniera selettiva per determinati controlli di input dell'utente. Questa proprietà deve essere letta dai servizi di inserimento nel journaling, inclusa l'implementazione WPF del journaling, ed è in genere impostata sui controlli utente, ad esempio le selezioni utente all'interno di elenchi che devono essere mantenuti nei passaggi di spostamento. Per informazioni sull'inserimento nel giornale di registrazione, vedere Cenni preliminari sulla navigazione.
Lettura di FrameworkPropertyMetadata
Ognuna delle proprietà collegate in precedenza è costituita dalle proprietà specifiche aggiunte FrameworkPropertyMetadata alla classe UIPropertyMetadatabase immediata. Per impostazione predefinita, ognuna di queste proprietà sarà false
. Una richiesta di metadati per una proprietà in cui conoscere il valore di queste proprietà è importante deve tentare di eseguire il cast dei metadati restituiti in FrameworkPropertyMetadatae quindi controllare i valori delle singole proprietà in base alle esigenze.
Specifica dei metadati
Quando si crea una nuova istanza di metadati ai fini dell'applicazione dei metadati a una nuova registrazione della proprietà di dipendenza, è possibile scegliere la classe di metadati da usare: la base PropertyMetadata o una classe derivata, ad FrameworkPropertyMetadataesempio . In generale, è consigliabile usare FrameworkPropertyMetadata, in particolare se la proprietà ha alcuna interazione con il sistema di proprietà e le funzioni WPF, ad esempio layout e data binding. Un'altra opzione per scenari più sofisticati consiste nel derivare da FrameworkPropertyMetadata per creare una classe di report dei metadati personalizzata con informazioni aggiuntive contenute nei relativi membri. In alternativa, è possibile usare PropertyMetadata o UIPropertyMetadata per comunicare il grado di supporto per le funzionalità dell'implementazione.
Per le proprietà esistenti (AddOwner o OverrideMetadata chiamare), è consigliabile eseguire sempre l'override con il tipo di metadati usato dalla registrazione originale.
Se si sta creando un'istanza FrameworkPropertyMetadata di , esistono due modi per popolare i metadati con valori per le proprietà specifiche che comunicano le caratteristiche della proprietà del framework:
Usare la firma del FrameworkPropertyMetadata costruttore che consente un
flags
parametro. Questo parametro deve essere riempito con tutti i valori combinati desiderati dei flag di FrameworkPropertyMetadataOptions enumerazione.Usare una delle firme senza un
flags
parametro e quindi impostare ogni proprietà booleana di report su FrameworkPropertyMetadatatrue
per ogni modifica delle caratteristiche desiderata. In questo caso, è necessario impostare queste proprietà prima della costruzione di qualsiasi elemento con questa proprietà di dipendenza. Le proprietà booleane sono configurate per la lettura e la scrittura, in modo da consentire di popolare i metadati evitando l'inserimento del parametroflags
; tuttavia, i metadati devono essere contrassegnati come sealed prima che la proprietà venga usata. Il tentativo di impostare le proprietà dopo la richiesta dei metadati sarà pertanto considerato un'operazione non valida.
Comportamento di unione dei metadati delle proprietà del framework
Quando si esegue l'override dei metadati delle proprietà del framework, le diverse caratteristiche dei metadati vengono unite o sostituite.
PropertyChangedCallback viene unito. Se si aggiunge un nuovo PropertyChangedCallback, il callback viene archiviato nei metadati. Se non si specifica un oggetto PropertyChangedCallback nell'override, il valore di PropertyChangedCallback viene promosso come riferimento dal predecessore più vicino che lo ha specificato nei metadati.
Il comportamento effettivo del sistema di proprietà per PropertyChangedCallback è che le implementazioni per tutti i proprietari di metadati nella gerarchia vengono mantenute e aggiunte a una tabella, con ordine di esecuzione da parte del sistema di proprietà in quanto i callback della classe derivata più profondamente vengono richiamati per primi. I callback ereditati vengono eseguiti solo una volta, essendo considerati come appartenenti alla classe che li aveva posizionati nei metadati.
DefaultValue viene sostituito. Se non si specifica un oggetto PropertyChangedCallback nell'override, il valore di DefaultValue proviene dal predecessore più vicino che lo ha specificato nei metadati.
CoerceValueCallback le implementazioni vengono sostituite. Se si aggiunge un nuovo CoerceValueCallback, il callback viene archiviato nei metadati. Se non si specifica un oggetto CoerceValueCallback nell'override, il valore di CoerceValueCallback viene promosso come riferimento dal predecessore più vicino che lo ha specificato nei metadati.
Il comportamento del sistema di proprietà è che viene richiamato solo nei CoerceValueCallback metadati immediati. Non vengono mantenuti riferimenti ad altre CoerceValueCallback implementazioni della gerarchia.
I flag di FrameworkPropertyMetadataOptions enumerazione vengono combinati come operazione OR bit per bit. Se si specifica FrameworkPropertyMetadataOptions, le opzioni originali non vengono sovrascritte. Per modificare un'opzione, impostare la proprietà corrispondente su FrameworkPropertyMetadata. Ad esempio, se l'oggetto originale FrameworkPropertyMetadata imposta il FrameworkPropertyMetadataOptions.NotDataBindable flag, è possibile modificarlo impostando su FrameworkPropertyMetadata.IsNotDataBindable
false
.
Questo comportamento viene implementato da Mergee può essere sottoposto a override nelle classi di metadati derivate.
Vedi anche
.NET Desktop feedback