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 |
---|---|
Un único objeto arbitrario. |
|
Un encabezado y un único elemento; los dos son objetos arbitrarios. |
|
Una colección de objetos arbitrarios. |
|
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.
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
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
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
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
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 |
---|---|---|
Texto sin formato |
||
Texto con formato |
||
Texto oculto (se enmascaran los caracteres) |
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 |
---|---|---|
Documento |
||
Documento |
||
Documento |
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.