Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
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 o ContentElement viene usato in un'interfaccia utente e lo scopo che serve 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 in cui il modello di contenuto è 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.
Framework-Level e Core-Level
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 del framework WPF presenta una soluzione più completa per le esigenze di base dell'applicazione, inclusa l'implementazione di Gestione layout per la presentazione. 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 con tre delle classi di elementi più importanti per 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 alcune indicazioni ed esempi pratici, vedere Cenni preliminari sulla creazione di controlli.
Se non si crea un controllo ed è necessario derivare da una classe superiore nella gerarchia, le sezioni seguenti sono destinate a una guida per le caratteristiche definite in ogni classe di elemento 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à.
Capacità di utilizzare le proprietà di dipendenza e le proprietà associate che sono 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:
Supporto di base per i valori delle proprietà animate. Per altre informazioni, vedere Panoramica dell'animazione.
Supporto degli eventi di input di base e supporto per i comandi. Per altre informazioni, vedere Panoramica dell'input e Panoramica dei comandi.
Metodi virtuali di cui è possibile eseguire l'override per fornire informazioni a un sistema di layout.
Se si crea una classe che deriva da FrameworkElement, si ereditano le funzionalità seguenti oltre a quella fornita da UIElement:
Supporto per stili e storyboard. Per altre informazioni, vedere Style e Cenni preliminari sugli storyboard.
Supporto per il data binding. Per ulteriori informazioni, consultare Panoramica sull'associazione dei dati.
Supporto per i riferimenti alle risorse dinamiche. Per altre informazioni, vedere Risorse XAML.
Supporto all'ereditarietà dei valori delle proprietà e altri flag nei metadati che consentono di segnalare condizioni relative alle proprietà ai servizi del framework, come il data binding, gli stili o l'implementazione del layout del framework. Per altre informazioni, vedere Metadati delle proprietà del framework.
Concetto dell'albero logico. Per altre informazioni, vedere Alberi 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:
Supporto per le animazioni. Per altre informazioni, vedere Panoramica dell'animazione.
Supporto degli eventi di input di base e supporto per i comandi. Per altre informazioni, vedere Panoramica dell'input e Panoramica dei comandi.
Se si crea una classe che deriva da FrameworkContentElement, si ottengono le funzionalità seguenti oltre a quella fornita da ContentElement:
Supporto per stili e storyboard. Per altre informazioni, vedere Style e Cenni preliminari sull'animazione.
Supporto per il data binding. Per ulteriori informazioni, consultare Panoramica sull'associazione dei dati.
Supporto per i riferimenti alle risorse dinamiche. Per altre informazioni, vedere Risorse XAML.
Supporto per l'ereditarietà dei valori delle proprietà e altri flag nei metadati che aiutano a segnalare condizioni relative alle proprietà ai servizi del framework, come il data binding, gli stili o l'implementazione del framework di layout. 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 un'ampia gamma di classi. Il modello di contenuto per una classe è un fattore da considerare se si vuole trovare una classe appropriata 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 ulteriori informazioni, vedere Modello di Threading.
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.
Congelabile
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 Visual oggetto; può contenere proprietà che diventano proprietà secondarie quando Freezable viene applicato per assegnare un valore di proprietà di un altro oggetto e tali proprietà secondarie potrebbero influire sul rendering. Per ulteriori informazioni, vedere la Panoramica degli Oggetti Freezable .
Animatable è una Freezable classe derivata che aggiunge specificamente il livello di controllo dell'animazione e alcuni membri di utilità, in modo che le proprietà attualmente animate possano essere distinte da quelle non animate.
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 è la modellizzazione del controllo.
Vedere anche
.NET Desktop feedback