Condividi tramite


Modello di contenuto WPF

Windows Presentation Foundation (WPF) è una piattaforma di presentazione che fornisce molti controlli e tipi simili a controlli il cui scopo principale è quello di visualizzare diversi tipi di contenuto. Per determinare da quale controllo utilizzare o da quale controllo derivare, è necessario comprendere i tipi di oggetti che un particolare controllo può visualizzare meglio.

In questo argomento viene riepilogato il modello di contenuto per i controlli e i tipi simili al controllo WPF. Il modello di contenuto descrive il contenuto che può essere usato in un controllo . Questo argomento elenca anche le proprietà del contenuto per ogni modello di contenuto. Una proprietà di contenuto è una proprietà utilizzata per archiviare il contenuto dell'oggetto.

Classi che contengono contenuto arbitrario

Alcuni controlli possono contenere un oggetto di qualsiasi tipo, ad esempio una stringa, un oggetto DateTime o un UIElement che è un contenitore per elementi aggiuntivi. Ad esempio, un Button può contenere un'immagine e un testo; o un CheckBox può contenere il valore di DateTime.Now.

WPF ha quattro classi che possono contenere contenuto arbitrario. Nella tabella seguente sono elencate le classi che ereditano da Control.

Classe che contiene contenuto arbitrario Contenuto
ContentControl Singolo oggetto arbitrario.
HeaderedContentControl Intestazione e un singolo elemento, entrambi oggetti arbitrari.
ItemsControl Raccolta di oggetti arbitrari.
HeaderedItemsControl Un'intestazione e una raccolta di elementi, tutti oggetti arbitrari.

I controlli che ereditano da queste classi possono contenere lo stesso tipo di contenuto e trattare il contenuto nello stesso modo. La figura seguente mostra un controllo di ogni modello di contenuto che contiene un'immagine e un testo:

Screenshot che mostra quattro controlli diversi, uno da ogni modello di contenuto.

Controlli che contengono un singolo oggetto arbitrario

La classe ContentControl contiene una singola parte di contenuto arbitrario. La proprietà "content" è Content. I controlli seguenti ereditano da ContentControl e usano il relativo modello di contenuto:

La figura seguente mostra quattro pulsanti il cui Content è impostato su una stringa, un oggetto DateTime, un Rectanglee un Panel che contiene un Ellipse e un TextBlock:

Screenshot che mostra quattro pulsanti con tipi di contenuto diversi.

Per un esempio di come impostare la proprietà Content, vedere ContentControl.

Controlli che contengono un'intestazione e un singolo oggetto arbitrario

La classe HeaderedContentControl eredita da ContentControl e visualizza il contenuto con un'intestazione. Eredita la proprietà contenuto, Content, da ContentControl e definisce la proprietà Header di tipo Object; pertanto, entrambe possono essere un oggetto arbitrario.

I controlli seguenti ereditano da HeaderedContentControl e usano il relativo modello di contenuto:

La figura seguente mostra due oggetti TabItem. Il primo TabItem dispone di oggetti UIElement come Header e Content. Il Header è impostato su un StackPanel che contiene un Ellipse e un TextBlock. Il Content è impostato su un StackPanel contenente un TextBlock e un Label. Il secondo TabItem ha una stringa nel Header e un TextBlock nel Content.

TabControl che utilizza tipi diversi nella proprietà Header.

Per un esempio di come creare oggetti TabItem, vedere HeaderedContentControl.

Controlli che contengono una raccolta di oggetti arbitrari

La classe ItemsControl eredita da Control e può contenere più elementi, ad esempio stringhe, oggetti o altri elementi. Le proprietà del contenuto sono ItemsSource e Items. ItemsSource viene in genere usato per popolare il ItemsControl con una raccolta dati. Se non si desidera utilizzare una raccolta per popolare il ItemsControl, è possibile aggiungere elementi usando la proprietà Items.

I controlli seguenti ereditano da ItemsControl e usano il relativo modello di contenuto:

La figura seguente mostra un ListBox che contiene questi tipi di elementi:

Screenshot che mostra un ListBox con quattro tipi di contenuto.

Controlli che contengono un'intestazione e una raccolta di oggetti arbitrari

La classe HeaderedItemsControl eredita da ItemsControl e può contenere più elementi, ad esempio stringhe, oggetti o altri elementi e un'intestazione. Eredita le proprietà del contenuto ItemsControl, ItemsSourcee Itemse definisce la proprietà Header che può essere un oggetto arbitrario.

I controlli seguenti ereditano da HeaderedItemsControl e usano il relativo modello di contenuto:

Classi che contengono una raccolta di oggetti UIElement

La classe Panel posiziona e dispone gli oggetti UIElement figlio. La proprietà content è Children.

Le classi seguenti ereditano dalla classe Panel e usano il relativo modello di contenuto:

Per ulteriori informazioni, vedere la Panoramica dei pannelli .

Classi che influiscono sull'aspetto di un oggetto UIElement

La classe Decorator applica effetti visivi su o intorno a un singolo elemento figlio UIElement. La proprietà del contenuto è Child. Le classi seguenti ereditano da Decorator e usano il relativo modello di contenuto:

La figura seguente mostra un TextBox che è decorato con un Border attorno.

Casella di testo con bordo nero
TextBlock con un bordo

Classi che forniscono feedback visivo su un UIElement

La classe Adorner fornisce segnali visivi a un utente. Ad esempio, usare un Adorner per aggiungere maniglie funzionali agli elementi o fornire informazioni sullo stato di un controllo. La classe Adorner fornisce un framework per consentire la creazione di ornamenti personalizzati. WPF non fornisce decoratori implementati. Per ulteriori informazioni, vedere Panoramica sugli abbellimenti.

Classi che consentono agli utenti di immettere testo

WPF fornisce tre controlli principali che consentono agli utenti di immettere testo. Ogni controllo visualizza il testo in modo diverso. Nella tabella seguente sono elencati questi tre controlli correlati al testo, le relative funzionalità quando visualizzano testo e le relative proprietà che contengono il testo del controllo.

Controllo Il testo viene visualizzato come Proprietà contenuto
TextBox Testo normale Text
RichTextBox Testo formattato Document
PasswordBox Testo nascosto (i caratteri sono mascherati) Password

Classi che visualizzano il testo

È possibile usare diverse classi per visualizzare testo normale o formattato. È possibile usare TextBlock per visualizzare piccole quantità di testo. Se si desidera visualizzare grandi quantità di testo, usare i controlli FlowDocumentReader, FlowDocumentPageViewero FlowDocumentScrollViewer.

L'TextBlock ha due proprietà del contenuto: Text e Inlines. Quando si desidera visualizzare testo che usa una formattazione coerente, la proprietà Text è spesso la scelta migliore. Se si prevede di utilizzare una formattazione diversa in tutto il testo, utilizzare la proprietà Inlines. La proprietà Inlines è una raccolta di oggetti Inline, che specificano come formattare il testo.

Nella tabella seguente sono elencate le proprietà dei contenuti per le classi FlowDocumentReader, FlowDocumentPageViewere FlowDocumentScrollViewer.

Controllo Proprietà del contenuto Tipo di proprietà del contenuto
FlowDocumentPageViewer Documento IDocumentPaginatorSource
FlowDocumentReader Documento FlowDocument
FlowDocumentScrollViewer Documento FlowDocument

Il FlowDocument implementa l'interfaccia IDocumentPaginatorSource; pertanto, tutte e tre le classi possono accettare un FlowDocument come contenuto.

Classi che formattano il testo

TextElement e le relative classi consentono di formattare il testo. Gli oggetti TextElement contengono e formattano il testo negli oggetti TextBlock e FlowDocument. I due tipi principali di oggetti TextElement sono Block elementi e Inline elementi. Un elemento Block rappresenta un blocco di testo, ad esempio un paragrafo o un elenco. Un elemento Inline rappresenta una parte di testo in un blocco. Molte classi Inline specificano la formattazione per il testo a cui vengono applicate. Ogni TextElement ha un proprio modello di contenuto. Per altre informazioni, vedere Cenni preliminari sul modello di contenuto textElement .

Vedere anche