Cenni preliminari sugli elementi di base

Una percentuale elevata di classi in Windows Presentation Foundation (WPF) è derivata da quattro classi comunemente indicate nella documentazione dell'SDK come classi di elementi di base. Queste classi sono UIElement, FrameworkElement, ContentElemente FrameworkContentElement. La DependencyObject classe è correlata anche perché è una classe base comune di e UIElementContentElement

API degli elementi di base nelle classi WPF

Sia UIElement che ContentElement sono derivati da DependencyObject, attraverso percorsi leggermente diversi. La suddivisione a questo livello riguarda il modo in cui un UIElement oggetto o ContentElement viene usato in un'interfaccia utente e lo scopo che servono in un'applicazione. UIElement ha Visual anche nella gerarchia di classi, ovvero una classe che espone il supporto grafico di livello inferiore sottostante Windows Presentation Foundation (WPF). Visual fornisce un framework di rendering definendo aree dello schermo rettangolari indipendenti. In pratica, UIElement è per gli elementi che supporteranno un modello a oggetti più grande, sono destinati a eseguire il rendering e il layout in aree che possono essere descritte come aree dello schermo rettangolare e dove il con modalità tenda l è deliberatamente più aperto, per consentire combinazioni diverse di elementi. ContentElement non deriva da Visual. Il modello è che un ContentElement oggetto verrebbe utilizzato da qualcos'altro, ad esempio un lettore o un visualizzatore che interpreterebbe quindi gli elementi e produrrebbe il completamento Visual per Windows Presentation Foundation (WPF) da utilizzare. Alcune UIElement classi sono destinate a essere host di contenuto: forniscono l'hosting e il rendering per una o più ContentElement classi (DocumentViewer è un esempio di tale classe). ContentElement viene usato come classe di base per gli elementi con modelli a oggetti leggermente più piccoli e che più indirizzino il testo, le informazioni o il contenuto del documento che potrebbe essere ospitato all'interno di un oggetto UIElement.

Livello di framework e livello principale

UIElement funge da classe base per FrameworkElemente ContentElement funge da classe base per FrameworkContentElement. Il motivo di questo livello successivo di classi consiste nel supportare un livello di base WPF separato da un livello di framework WPF, con questa divisione esistente anche nel modo in cui le API sono divise tra gli assembly PresentationCore e PresentationFramework. Il livello di framework WPF offre una soluzione più completa per le necessità di base delle applicazioni, inclusa l'implementazione del gestore di layout per le presentazioni. Il livello di base WPF consente di usare gran parte di WPF senza sovraccaricare l'assembly aggiuntivo. La distinzione tra questi livelli è molto raramente importante per gli scenari di sviluppo di applicazioni più tipici e, in generale, è consigliabile considerare le API WPF nel suo complesso e non preoccuparsi della differenza tra il livello del framework WPF e il livello di core WPF. Potrebbe essere necessario conoscere le distinzioni di livello se la progettazione dell'applicazione sceglie di sostituire quantità sostanziali di funzionalità a livello di framework WPF, ad esempio se la soluzione complessiva ha già implementazioni specifiche di composizione e layout dell'interfaccia utente.

Scelta dell'elemento da cui derivare

Il modo più pratico per creare una classe personalizzata che estende WPF consiste nel derivare da una delle classi WPF in cui è possibile ottenere il maggior numero possibile di funzionalità desiderate tramite la gerarchia di classi esistente. Questa sezione elenca le funzionalità fornite da tre delle più importanti classi di elementi che consentono di decidere da quale classe ereditare.

Se si implementa un controllo, che è in realtà uno dei motivi più comuni per derivare da una classe WPF, è probabile che si voglia derivare da una classe che è un controllo pratico, una classe base della famiglia di controlli o almeno dalla Control classe base di base. Per istruzioni ed esempi pratici, vedere Cenni preliminari sulla modifica di controlli.

Se non si crea un controllo ed è necessario derivare da una classe più elevata nella gerarchia, nelle sezioni seguenti vengono fornite informazioni sulle caratteristiche definite in ogni classe degli elementi di base.

Se si crea una classe che deriva da DependencyObject, si ereditano le funzionalità seguenti:

  • GetValue e SetValue supporto e supporto generale del sistema di proprietà.

  • Possibilità di utilizzare le proprietà di dipendenza e le proprietà associate implementate come proprietà di dipendenza.

Se si crea una classe che deriva da UIElement, si ereditano le funzionalità seguenti oltre a quella fornita da DependencyObject:

Se si crea una classe che deriva da FrameworkElement, si ereditano le funzionalità seguenti oltre a quella fornita da UIElement:

  • Supporto per l'uso di stili e storyboard. Per altre informazioni, vedere Style e Cenni preliminari sugli storyboard.

  • Supporto del data binding. Per altre informazioni, vedere la panoramica del data binding.

  • Supporto per i riferimenti di risorse dinamiche. Per altre informazioni, vedere Risorse XAML.

  • Supporto dell'ereditarietà dei valori di proprietà e altri flag nei metadati che agevolano la segnalazione di condizioni relative alle proprietà ai servizi del framework, ad esempio data binding, stili o implementazione del layout del framework. Per altre informazioni, vedere Metadati delle proprietà del framework.

  • Concetto di albero logico. Per altre informazioni, vedere Strutture ad albero in WPF.

  • Supporto per l'implementazione pratica a livello di framework WPF del sistema di layout, incluso un OnPropertyChanged override in grado di rilevare le modifiche apportate alle proprietà che influiscono sul layout.

Se si crea una classe che deriva da ContentElement, si ereditano le funzionalità seguenti oltre a quella fornita da DependencyObject:

Se si crea una classe che deriva da FrameworkContentElement, si ottengono le funzionalità seguenti oltre a quella fornita da ContentElement:

  • Supporto per l'uso di stili e storyboard. Per altre informazioni, vedere Style e Cenni preliminari sull'animazione.

  • Supporto del data binding. Per altre informazioni, vedere la panoramica del data binding.

  • Supporto per i riferimenti di risorse dinamiche. Per altre informazioni, vedere Risorse XAML.

  • Supporto dell'ereditarietà dei valori di proprietà e altri flag nei metadati che agevolano la segnalazione di condizioni relative alle proprietà ai servizi del framework, ad esempio data binding, stili o implementazione del layout del framework. Per altre informazioni, vedere Metadati delle proprietà del framework.

  • Non si eredita l'accesso alle modifiche del sistema di layout, ad esempio ArrangeOverride. Le implementazioni del sistema di layout sono disponibili solo in FrameworkElement. Tuttavia, si eredita un OnPropertyChanged override che può rilevare le modifiche alle proprietà che influenzano il layout e segnalare tali modifiche a qualsiasi host di contenuto.

I modelli di contenuto sono documentati per una varietà di classi. Il modello di contenuto per una classe è un fattore possibile da considerare per trovare una classe adatta da cui derivare. Per altre informazioni, vedere Modello di contenuto WPF.

Altre classi di base

DispatcherObject

DispatcherObject fornisce supporto per il modello di threading WPF e consente l'associazione di tutti gli oggetti creati per le applicazioni WPF a un oggetto Dispatcher. Anche se non si deriva da UIElement, DependencyObjecto Visual, è consigliabile prendere in considerazione la derivazione da DispatcherObject per ottenere questo supporto del modello di threading. Per altre informazioni, vedere Modello di threading.

Oggetto visivo

Visual implementa il concetto di un oggetto 2D che in genere richiede una presentazione visiva in un'area approssimativamente rettangolare. Il rendering effettivo di un Visual viene eseguito in altre classi (non è indipendente), ma la Visual classe fornisce un tipo noto usato dai processi di rendering a vari livelli. Visual implementa l'hit testing, ma non espone eventi che segnalano i positivi del hit testing (si trovano in UIElement). Per altre informazioni, vedere Programmazione a livello visivo.

Freezable

Freezable simula l'immutabilità in un oggetto modificabile fornendo il mezzo per generare copie dell'oggetto quando è necessario o desiderato un oggetto non modificabile per motivi di prestazioni. Il Freezable tipo fornisce una base comune per determinati elementi grafici, ad esempio geometrie e pennelli, nonché animazioni. In particolare, un Freezable oggetto non è un Visualoggetto , può contenere proprietà che diventano proprietà secondarie quando Freezable viene applicato per riempire un valore di proprietà di un altro oggetto e tali proprietà secondarie potrebbero influire sul rendering. Per altre informazioni, vedere Cenni preliminari sugli oggetti Freezable.

Animatable

Animatable è una Freezable classe derivata che aggiunge in modo specifico il livello di controllo dell'animazione e alcuni membri dell'utilità in modo che le proprietà attualmente animate possano essere distinte dalle proprietà nonanimato.

Controllo

Control è la classe di base desiderata per il tipo di oggetto che è definito in vari modi un controllo o un componente, a seconda della tecnologia. In generale, le classi di controllo WPF sono classi che rappresentano direttamente un controllo dell'interfaccia utente o partecipano strettamente alla composizione dei controlli. La funzionalità principale che Control abilita è il controllo della creazione di modelli.

Vedi anche