Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Un alto porcentaje de clases de Windows Presentation Foundation (WPF) se derivan de cuatro clases que se conocen normalmente en la documentación del SDK como clases de elementos base. Estas clases son UIElement, FrameworkElement, ContentElementy FrameworkContentElement. La DependencyObject clase también está relacionada, porque es una clase base común de y UIElementContentElement
API de elementos base en clases de WPF
Tanto UIElement como ContentElement se derivan de DependencyObject, a través de caminos ligeramente diferentes. La división en este nivel trata sobre cómo se usan un UIElement y un ContentElement en una interfaz de usuario y qué propósito sirven en una aplicación. UIElement también tiene Visual en su jerarquía de clases, que es una clase que expone la compatibilidad con gráficos de nivel inferior subyacente a Windows Presentation Foundation (WPF). Visual proporciona un marco de representación mediante la definición de regiones de pantalla rectangular independientes. En la práctica, UIElement es para los elementos que admitirán un modelo de objetos más grande, están diseñados para representar y diseñar en regiones que se pueden describir como regiones de pantalla rectangular y donde el modelo de contenido está deliberadamente más abierto, para permitir diferentes combinaciones de elementos. ContentElement no deriva de Visual; su modelo consiste en que un ContentElement sería consumido por otro elemento, como un lector o visor que interpretaría los elementos y generaría el Visual completo para que Windows Presentation Foundation (WPF) lo consuma. Algunas UIElement clases están pensadas para ser hosts de contenido: proporcionan el hospedaje y la representación de una o varias ContentElement clases (DocumentViewer es un ejemplo de dicha clase). ContentElement se usa como clase base para los elementos con modelos de objetos algo más pequeños y que abordan más el texto, la información o el contenido del documento que podría hospedarse dentro de UIElement.
Framework-Level y Core-Level
UIElement actúa como clase base para FrameworkElementy ContentElement sirve como clase base para FrameworkContentElement. La razón de este siguiente nivel de clases es admitir un nivel básico de WPF independiente de un nivel de marco de WPF, con esta división también existente en cómo se dividen las API entre los ensamblados PresentationCore y PresentationFramework. El nivel de marco de WPF presenta una solución más completa para las necesidades básicas de la aplicación, incluida la implementación del administrador de diseño para la presentación. El nivel de núcleo de WPF proporciona una manera de usar gran parte de WPF sin incurrir en el coste del ensamblaje adicional. La distinción entre estos niveles rara vez es importante para los escenarios de desarrollo de aplicaciones más típicos y, en general, debe pensar en las API de WPF en su conjunto y no preocuparse por la diferencia entre el nivel de marco de WPF y el nivel de núcleo de WPF. Es posible que tenga que conocer las diferencias de nivel si el diseño de la aplicación elige reemplazar cantidades sustanciales de funcionalidad de nivel de marco de WPF, por ejemplo, si la solución general ya tiene sus propias implementaciones de composición y diseño de la interfaz de usuario (UI).
Elección del elemento del que se va a derivar
La manera más práctica de crear una clase personalizada que extiende WPF es derivando de una de las clases de WPF en las que se obtiene la mayor cantidad posible de la funcionalidad deseada a través de la jerarquía de clases existente. En esta sección se muestra la funcionalidad que incluye tres de las clases de elementos más importantes para ayudarle a decidir de qué clase heredar.
Si va a implementar un control, que realmente es una de las razones más comunes para derivar de una clase WPF, probablemente quiera derivar de una clase que sea un control útil, una clase base de una familia de controles o, al menos, de la clase base Control. Para obtener algunas instrucciones y ejemplos prácticos, consulte Información general sobre la creación de controles.
Si no va a crear un control y necesita derivar de una clase superior en la jerarquía, las secciones siguientes están pensadas como guía para las características que se definen en cada clase de elemento base.
Si crea una clase que deriva de DependencyObject, hereda la siguiente funcionalidad:
GetValue y SetValue soporte, y soporte general del sistema de propiedades.
Capacidad de usar propiedades de dependencia y propiedades adjuntas que se implementan como propiedades de dependencia.
Si crea una clase que deriva de UIElement, hereda la siguiente funcionalidad además de la proporcionada por DependencyObject:
Compatibilidad básica con valores de propiedad animados. Para obtener más información, vea Información general sobre animaciones.
Compatibilidad básica con eventos de entrada y compatibilidad con comandos. Para obtener más información, vea Información general de entrada e Información general sobre comandos.
Métodos virtuales que se pueden invalidar para proporcionar información a un sistema de diseño.
Si crea una clase que deriva de FrameworkElement, hereda la siguiente funcionalidad además de la proporcionada por UIElement:
Soporte para estilos y guiones gráficos. Para obtener más información, consulte Style y Resumen de guiones gráficos.
Compatibilidad con el enlace de datos. Para obtener más información, consulte Información general del enlace de datos.
Compatibilidad con referencias de recursos dinámicos. Para obtener más información, consulta Recursos XAML.
Compatibilidad con la herencia de valores de propiedad y otros indicadores en los metadatos que ayudan a informar condiciones sobre las propiedades a los servicios del marco, como la vinculación de datos, los estilos o la implementación del diseño por el marco. Para obtener más información, vea Metadatos de propiedad de marco.
Concepto del árbol lógico. Para obtener más información, vea Árboles en WPF.
Compatibilidad con la implementación práctica a nivel de marco de WPF del sistema de diseño, incluida una OnPropertyChanged sobrescritura que puede detectar cambios en las propiedades que influyen en el diseño.
Si crea una clase que deriva de ContentElement, hereda la siguiente funcionalidad además de la proporcionada por DependencyObject:
Compatibilidad con animaciones. Para obtener más información, vea Información general sobre animaciones.
Compatibilidad básica con eventos de entrada y compatibilidad con comandos. Para obtener más información, vea Información general de entrada e Información general sobre comandos.
Si crea una clase que deriva de FrameworkContentElement, obtendrá la siguiente funcionalidad además de la proporcionada por ContentElement:
Soporte para estilos y guiones gráficos. Para obtener más información, vea Style y Información general sobre animaciones.
Compatibilidad con el enlace de datos. Para obtener más información, consulte Información general del enlace de datos.
Compatibilidad con referencias de recursos dinámicos. Para obtener más información, consulta Recursos XAML.
Compatibilidad con la herencia de valores de propiedad y otras marcas en los metadatos que ayudan a notificar condiciones sobre las propiedades a los servicios del framework, como el enlace de datos, los estilos o la implementación del diseño en el framework. Para obtener más información, vea Metadatos de propiedad de marco.
No hereda el acceso a las modificaciones del sistema de diseño (como ArrangeOverride). Las implementaciones del sistema de diseño solo están disponibles en FrameworkElement. Sin embargo, hereda una OnPropertyChanged invalidación que puede detectar cambios en las propiedades que influyen en el diseño y notificarlos a cualquier host de contenido.
Los modelos de contenido se documentan para una variedad de clases. El modelo de contenido de una clase es un factor posible que debe tener en cuenta si desea encontrar una clase adecuada de la que derivar. Para obtener más información, vea Modelo de contenido de WPF.
Otras clases base
DispatcherObject
DispatcherObject proporciona compatibilidad con el modelo de subprocesos de WPF y permite que todos los objetos creados para las aplicaciones de WPF estén asociados a un Dispatcher. Incluso si no deriva de UIElement, DependencyObject o Visual, debe considerar derivar de DispatcherObject para obtener compatibilidad con este modelo de subprocesamiento. Para obtener más información, consulte Modelo de subprocesos.
Visual
Visual implementa el concepto de un objeto 2D que normalmente requiere presentación visual en una región aproximadamente rectangular. La representación real de un Visual se produce en otras clases (no es independiente), pero la Visual clase proporciona un tipo conocido que se usa mediante la representación de procesos en varios niveles. Visual implementa prueba de colisiones, pero no expone eventos que reportan resultados positivos de prueba de colisiones (estos están en UIElement). Para obtener más información, vea Programación de capas visuales.
Congelable
Freezable simula la inmutabilidad en un objeto mutable proporcionando los medios para generar copias del objeto cuando se requiere o se desea un objeto inmutable por motivos de rendimiento. El Freezable tipo proporciona una base común para determinados elementos gráficos, como geometrías y pinceles, así como animaciones. En particular, un Freezable no es un Visualelemento ; puede contener propiedades que se convierten en subpropiedades cuando Freezable se aplica para rellenar un valor de propiedad de otro objeto y esas subpropiedades pueden afectar a la representación. Para obtener más información, vea Información general sobre objetos freezable.
Animatable es una Freezable clase derivada que agrega específicamente la capa de control de animación y algunos miembros de utilidad para que las propiedades animadas actualmente se puedan distinguir de las propiedades noanimadas.
Supervisión
Control es la clase base prevista para el tipo de objeto que se denomina de forma diferente un control o componente, en función de la tecnología. En general, las clases de control de WPF son clases que representan directamente un control de interfaz de usuario o participan estrechamente en la composición del control. La funcionalidad principal que Control habilita es la creación de plantillas de control.
Consulte también
.NET Desktop feedback