Modelo de contenido de WPF

Windows Presentation Foundation (WPF) es una plataforma de presentación que proporciona muchos controles y tipos similares cuyo propósito principal es mostrar distintos tipos de contenido. Para determinar qué control se debe usar o de qué control hay que derivar, debe entender los tipos de objetos que un control determinado puede mostrar mejor.

En este tema se resume el modelo de contenido para el control WPF y los tipos similares. El modelo de contenido describe qué contenido se puede utilizar en un control. Este tema también incluye las propiedades de contenido para cada modelo de contenido. Una propiedad de contenido es aquélla que se utiliza para almacenar el contenido del objeto.

Este tema contiene las secciones siguientes.

  • Clases que incluyen contenido arbitrario
  • Clases que contienen una colección de objetos UIElement
  • Clases que afectan a la apariencia de un objeto UIElement
  • Clases que proporcionan comentarios visuales sobre un objeto UIElement
  • Clases que permiten a los usuarios introducir texto
  • Clases que muestran su texto
  • Clases que dan formato al texto
  • Temas relacionados

Clases que incluyen contenido arbitrario

Algunos controles pueden contener un objeto de cualquier tipo, como una cadena, un objeto DateTime o un UIElement que es un contenedor para elementos adicionales. Por ejemplo, un Button puede contener una imagen y algún texto; o CheckBox puede contener el valor de DateTime.Now.

WPF tiene cuatro clases que pueden incluir contenido arbitrario. En la tabla siguiente se enumeran las clases que heredan de Control.

Clases que incluyen contenido arbitrario

Content

ContentControl

Un único objeto arbitrario.

HeaderedContentControl

Un encabezado y un único elemento; los dos son objetos arbitrarios.

ItemsControl

Una colección de objetos arbitrarios.

HeaderedItemsControl

Un encabezado y una colección de elementos; todos son objetos arbitrarios.

Los controles que heredan de estas clases pueden incluir el mismo tipo de contenido y tratar el contenido de la misma manera. En la ilustración siguiente se muestra un control de cada modelo de contenido que contiene una imagen y texto.

Elementos Button, GroupBox, Listbox, TreeViewItem

Controles que contienen un único objeto arbitrario

La clase ContentControl contiene una parte única de contenido arbitrario. Su propiedad de contenido es Content. Los siguientes controles heredan de ContentControl y usan su modelo de contenido:

En la ilustración se muestran cuatro botones cuya propiedad Content está establecida en una cadena, un objeto DateTime, un Rectangle y un Panel que contiene un Ellipse y un TextBlock.

Cuatro botones que tienen distintos tipos de contenido

Cuatro botones

Para obtener un ejemplo de cómo establecer la propiedad Content, vea ContentControl.

Controles que contienen un encabezado y un único objeto arbitrario

La clase HeaderedContentControl hereda de ContentControl y muestra contenido con un encabezado. Hereda la propiedad de contenido, Content, de ContentControl y define la propiedad Header que es del tipo Object; en consecuencia, ambos pueden ser un objeto arbitrario.

Los siguientes controles heredan de HeaderedContentControl y usan su modelo de contenido:

En la ilustración siguiente se muestran dos objetos TabItem. El primer TabItem tiene objetos UIElement como Header y Content. Header está establecido en un StackPanel que contiene un Ellipse y un TextBlock. Content está establecido en un StackPanel que contiene un TextBlock y un Label. El segundo TabItem tiene una cadena en Header y un TextBlock en Content.

TabControl que usa tipos diferentes en la propiedad Header

TabControl

Para obtener un ejemplo de cómo crear objetos TabItem, vea HeaderedContentControl.

Controles que contienen una colección de objetos arbitrarios

La clase ItemsControl hereda de Control y puede contener varios elementos, como cadenas, objetos u otros elementos. Sus propiedades de contenido son ItemsSource y Items. ItemsSource se suele usar para rellenar ItemsControl con una recolección de datos. Si no desea emplear una colección para rellenar el ItemsControl, puede agregar elementos mediante la propiedad Items.

Los siguientes controles heredan de ItemsControl y usan su modelo de contenido:

En la ilustración siguiente se muestra un control ListBox que contiene estos tipos de elementos:

ListBox que contiene varios tipos de objetos

ListBox con cuatro tipos de contenido

Controles que contienen un encabezado y una colección de objetos arbitrarios

La clase HeaderedItemsControl hereda de ItemsControl y puede contener varios elementos, como cadenas, objetos u otros elementos, y un encabezado. Hereda las propiedades de contenido de ItemsControl, ItemsSourcey Items, y define la propiedad Header que puede ser un objeto arbitrario.

Los siguientes controles heredan de HeaderedItemsControl y usan su modelo de contenido:

Clases que contienen una colección de objetos UIElement

La clase Panel coloca y organiza los objetos UIElement secundarios. Su propiedad de contenido es Children.

Las clases siguientes heredan de la clase Panel y usan su modelo de contenido:

Para obtener más información, vea Información general sobre elementos Panel.

Clases que afectan a la apariencia de un objeto UIElement

La clase Decorator aplica efectos visuales a un único objeto UIElement secundario o alrededor del mismo. Su propiedad de contenido es Child. Las clases siguientes heredan de Decorator y usan su modelo de contenido:

En la ilustración siguiente se muestra un objeto TextBox que tiene (está decorado con) un objeto Border alrededor.

TextBlock que tiene un borde

TextBox con borde negro

Clases que proporcionan comentarios visuales sobre un objeto UIElement

La clase Adorner proporciona indicaciones visuales a un usuario. Por ejemplo, use un Adorner para agregar controladores funcionales a los elementos o proporcionar información de estado sobre un control. La clase Adorner proporciona un marco para que pueda crear sus propios adornos. WPF no proporciona ningún adorno implementado. Para obtener más información, vea Información general sobre adornos.

Clases que permiten a los usuarios introducir texto

WPF proporciona tres controles primarios que permiten a los usuarios introducir texto. Cada control muestra el texto de manera diferente. En la tabla siguiente se enumeran estos tres controles relacionados con texto, sus capacidades cuando muestran texto y sus propiedades que contienen el texto del control.

Control

El texto se muestra como

Propiedad de contenido

TextBox

Texto sin formato

Text

RichTextBox

Texto con formato

Document

PasswordBox

Texto oculto (se enmascaran los caracteres)

Password

Clases que muestran su texto

Se pueden usar varias clases para mostrar texto sin formato o con formato. Puede emplear TextBlock para mostrar cantidades pequeñas de texto. Si desea mostrar grandes cantidades de texto, use los controles FlowDocumentReader, FlowDocumentScrollViewer o FlowDocumentPageViewer.

TextBlock tiene dos propiedades de contenido: Text y Inlines. Cuando se desea mostrar texto que usa un formato coherente, la propiedad Text suele ser la mejor opción. Si piensa usar formato diferente a lo largo del texto, emplee la propiedad Inlines. La propiedad Inlines es una colección de objetos Inline que especifican cómo se va a dar formato al texto.

En la siguiente tabla se hace una lista de la propiedad de contenido para FlowDocumentReader, las clases FlowDocumentScrollViewer y FlowDocumentPageViewer.

Control

Propiedad de contenido

Tipo de propiedad de contenido

FlowDocumentPageViewer

Documento

IDocumentPaginatorSource

FlowDocumentReader

Documento

FlowDocument

FlowDocumentScrollViewer

Documento

FlowDocument

FlowDocument implementa la interfaz IDocumentPaginatorSource; por tanto, las tres clases pueden tomar un objeto FlowDocument como contenido.

Clases que dan formato al texto

TextElement y sus clases relacionadas le permiten dar formato al texto. Los objetos TextElement contienen y dan formato al texto de objetos FlowDocument y TextBlock. Los dos tipos principales de objetos TextElement son elementos Block y Inline. Un elemento Block representa un bloque de texto, como un párrafo o una lista. Un elemento Inline representa una parte de texto de un bloque. Muchas clases Inline especifican el formato para el texto al que se aplican. Cada TextElement tiene su propio modelo de contenido. Para obtener más información, vea Información general sobre el modelo de contenido de TextElement.

Vea también

Otros recursos

Elementos fundamentales de WPF