Condividi tramite


Metadati delle proprietà del framework

Aggiornamento: novembre 2007

Per le proprietà degli elementi oggetto considerati come situati a livello di framework WPF nell'architettura Windows Presentation Foundation (WPF), vengono segnalate delle opzioni di metadati delle proprietà del framework. In generale, la designazione a livello di framework WPF implica che funzionalità quali il rendering, l'associazione dati e i miglioramenti del sistema di proprietà siano gestite dalle API di presentazione di WPF e dai file eseguibili. Questi sistemi eseguono una query sui metadati della proprietà del framework per determinare le caratteristiche specifiche delle funzionalità di particolari proprietà dell'elemento.

Nel presente argomento sono contenute le seguenti sezioni.

  • Prerequisiti
  • Contenuto dei metadati delle proprietà del framework
  • Lettura di FrameworkPropertyMetadata
  • Specifica dei metadati
  • Comportamento di unione dei metadati delle proprietà del framework
  • Argomenti correlati

Prerequisiti

Questo argomento presuppone la conoscenza delle proprietà di dipendenza dal punto di vista di un consumer delle proprietà di dipendenza esistenti nelle classi Windows Presentation Foundation (WPF), nonché la lettura della sezione Cenni preliminari sulle proprietà di dipendenza. È necessario inoltre aver letto l'argomento Metadati della proprietà di dipendenza.

Contenuto dei metadati delle proprietà del framework

I metadati delle proprietà del framework possono essere suddivisi nelle seguenti categorie:

  • Metadati che segnalano le 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 se vengono inoltre implementati i metodi MeasureOverride / ArrangeOverride nella classe per fornire un comportamento di rendering e informazioni specifiche al sistema di layout. In genere, tale implementazione verificherebbe le convalide di proprietà nelle proprietà di dipendenza, qualora qualcuna di tali proprietà di layout risultasse impostata su true nei metadati della proprietà; solo tali convalide richiederebbero un nuovo passaggio di layout.

  • Metadati che segnalano le proprietà di layout che influiscono sull'elemento padre di un elemento (AffectsParentArrange, AffectsParentMeasure). Alcuni esempi in cui questi flag sono impostati come predefiniti sono FixedPage.Left e Paragraph.KeepWithNext.

  • Inherits. Per impostazione predefinita, le proprietà di dipendenza non ereditano i valori. OverridesInheritanceBehavior consente di trasferire il percorso dell'ereditarietà anche in una struttura ad albero visuale, operazione necessaria per alcuni scenari di composizione dei controlli.

    Nota

    Il termine "eredita", nel contesto dei valori della proprietà è relativo alle proprietà di dipendenza e indica che gli elementi figlio possono ereditare il valore della proprietà di dipendenza effettivo dagli elementi padre grazie a una funzionalità a livello di framework WPF del sistema di proprietà di 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à.

  • Metadati che segnalano le caratteristiche dell'associazione dati (IsNotDataBindable, BindsTwoWayByDefault). Per impostazione predefinita, le proprietà di dipendenza del framework supportano l'associazione dati, con un comportamento di associazione unidirezionale. Se non è immaginabile alcuno scenario per l'associazione dati, è possibile disattivare questa funzionalità (dal momento che sono progettate per essere flessibili ed estensibili, non sono previsti molti esempi di proprietà di questo tipo nelle API WPF predefinite). È possibile impostare l'associazione in modo che disponga di un'impostazione predefinita bidirezionale per le proprietà che collegano i comportamenti di un controllo fra le parti che lo compongono (ad esempio IsSubmenuOpen) oppure un'associazione nella quale lo scenario comune e previsto per gli utenti è l'associazione bidirezionale (ad esempio Text). La modifica dei metadati correlati all'associazione dati ha effetto sull'impostazione predefinita; è sempre possibile modificare l'impostazione predefinita per singola associazione. Per informazioni dettagliate sulle modalità di associazione e sull'associazione in generale, vedere Cenni preliminari sull'associazione dati.

  • Metadati che segnalano se le proprietà devono essere inserite nel journal dalle applicazioni o dai servizi che supportano il journaling (Journal). Per impostazione predefinita, il journaling non è attivato per gli elementi generali, ma è attivato in maniera selettiva per determinati controlli di input dell'utente. Questa proprietà deve essere letta dai servizi di journaling, inclusa l'implementazione del journaling di WPF ed è impostata in genere nei controlli utente, ad esempio le selezioni dell'utente all'interno di elenchi che devono essere resi persistenti nei vari passaggi di spostamento. Per informazioni sul journal, vedere Cenni preliminari sull'esplorazione.

Lettura di FrameworkPropertyMetadata

Ognuna delle proprietà per le quali sono stati forniti i collegamenti in precedenza rappresentano le proprietà specifiche aggiunte dall'oggetto FrameworkPropertyMetadata alla relativa classe di base immediata UIPropertyMetadata. Per impostazione predefinita, ognuna di queste proprietà sarà false. Una richiesta di metadati per una proprietà, qualora sia importante conoscere il valore di queste proprietà, deve tentare di eseguire il cast dei metadati restituiti all'oggetto FrameworkPropertyMetadata e verificare quindi i valori delle singole proprietà se necessario.

Specifica dei metadati

Quando si crea una nuova istanza di metadati al fine di applicare i metadati alla registrazione di una nuova proprietà di dipendenza, è possibile scegliere la classe di metadati da utilizzare: la classe di base PropertyMetadata oppure una classe derivata, ad esempio FrameworkPropertyMetadata. In generale, è opportuno utilizzare la classe FrameworkPropertyMetadata, soprattutto se la proprietà interagisce in qualche modo con il sistema di proprietà e con funzioni WPF quali il layout e l'associazione dati. Per scenari più sofisticati, un'altra opzione consiste nel far derivare la classe da FrameworkPropertyMetadata, in modo da creare una classe di segnalazione dei metadati personalizzata con informazioni aggiuntive contenute nei relativi membri. In alternativa è possibile utilizzare gli oggetti PropertyMetadata o UIPropertyMetadata per comunicare il livello di supporto delle funzionalità dell'implementazione.

Per le proprietà esistenti (chiamata a AddOwner o OverrideMetadata), è sempre necessario eseguire l'override con il tipo di metadati utilizzato nella registrazione originale.

Se si crea un'istanza di FrameworkPropertyMetadata, sono disponibili due modi per popolare i metadati con i valori previsti per le proprietà specifiche che comunicano le caratteristiche delle proprietà del framework :

  1. Utilizzare la firma del costruttore di FrameworkPropertyMetadata che accetta un parametro flags. Per questo parametro è necessario specificare una combinazione di tutti i valori desiderati dei flag dell'enumerazione FrameworkPropertyMetadataOptions.

  2. Utilizzare una delle firme senza parametro flags e impostare quindi ciascuna proprietà booleana di generazione report dell'oggetto FrameworkPropertyMetadata su true per ogni modifica delle caratteristiche desiderata. In questo caso, sarà necessario impostare queste proprietà prima della costruzione di qualsiasi elemento con tale 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 parametro flags; tuttavia i metadati devono essere contrassegnati come sealed prima che la proprietà venga utilizzata. 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.

  • L'oggetto PropertyChangedCallback viene unito. Se si aggiunge un nuovo oggetto PropertyChangedCallback, quel callback viene memorizzato nei metadati. Se non si specifica un oggetto PropertyChangedCallback nell'override, il valore dell'oggetto PropertyChangedCallback viene promosso come riferimento dal predecessore più vicino che lo aveva specificato nei metadati.

  • Il comportamento effettivo del sistema di proprietà per l'oggetto PropertyChangedCallback prevede che le implementazioni di tutti i proprietari di metadati nella gerarchia vengano mantenute e aggiunte in una tabella, con un ordine di esecuzione da parte del sistema di proprietà tale che vengano richiamati per primi i callback della classe derivata di livello inferiore. I callback ereditati vengono eseguiti solo una volta, essendo considerati come appartenenti alla classe che li posiziona nei metadati.

  • L'oggetto DefaultValue viene sostituito. Se non si specifica un oggetto PropertyChangedCallback nell'override, il valore dell'oggetto DefaultValue proviene dal predecessore più vicino che lo aveva specificato nei metadati.

  • Le implementazioni di CoerceValueCallback vengono sostituite. Se si aggiunge un nuovo oggetto CoerceValueCallback, quel callback viene memorizzato nei metadati. Se non si specifica un oggetto CoerceValueCallback nell'override, il valore dell'oggetto CoerceValueCallback viene promosso come riferimento dal predecessore più vicino che lo aveva specificato nei metadati.

  • Il comportamento del sistema di proprietà prevede che venga richiamato solo l'oggetto CoerceValueCallback dei metadati diretti. Non viene mantenuto alcun riferimento ad altre implementazioni di CoerceValueCallback nella gerarchia.

  • I flag dell'oggetto FrameworkPropertyMetadataOptions vengono combinati come operazione OR bit per bit, rispetto ai valori delle varie proprietà booleane equivalenti nell'oggetto FrameworkPropertyMetadata dei metadati ereditati. L'oggetto IsAnimationProhibited viene sostituito con un qualsiasi nuovo valore oppure conserva il valore dei metadati ereditati.

Questo comportamento viene implementato dall'oggetto Merge ed è possibile eseguirne l'override nelle classi di metadati derivate.

Vedere anche

Concetti

Metadati della proprietà di dipendenza

Cenni preliminari sulle proprietà di dipendenza

Proprietà Dependency personalizzate

Riferimenti

GetMetadata