style plantillas para modern gratis wpf mvvm user-controls controltemplate

plantillas - style in wpf



WPF ControlTemplate vs UserControl (2)

Recientemente hice un UserControl , que tomó bastante tiempo, porque tuve que trabajar con propiedades de dependencia personalizadas y así sucesivamente ...

De todos modos, fue solo un grupo de 3 controles: TextBox, Popup con Hierarchical Tree.

Ahora me di cuenta de que probablemente podría escribir solo una ControlTemplate . Por lo tanto, ¿cuál es el beneficio de usar UserControl ?


Hay tres casos para considerar aquí: UserControl, ControlTemplate y Control personalizado . (Supongo que una DataTemplate no necesita explicación)

Un control personalizado es algo que usted proporciona cuando crea la funcionalidad base de un nuevo componente de interfaz de usuario. Existen varios pros y contras para esto, pero por ejemplo, si desea un comportamiento de selección personalizado de un ItemsControl, puede hacerlo subclasificando Selector o MultiSelector (el wpftoolkit DataGrid lo hace). Además, si desea un objeto que contendría una nueva DependencyProperty, en la mayoría de los casos derivará de Control.

El principio de wpf que se incluye aquí es el paradigma de control "sin aspecto", o "asegúrese de esperar que alguien aplique su Control, o al menos haga que se comporte bien en su propia situación de plantilla". Los controles personalizados generalmente se crean teniendo en cuenta la posibilidad de reutilización, a menudo como parte de los marcos dlls.

Una ControlTemplate es esencialmente una descripción de un árbol visual de reemplazo, y se puede establecer explícitamente en FrameworkElements o como parte de un Style. Esta es la opción a la que debe aspirar cuando su objetivo principal es realizar una solicitud y finalizarla. Puede hacer casi cualquier cosa con una plantilla de control visual, si puede obtener los enlaces y desencadenadores (y el posible estilo que lo contiene) correctamente. Todo esto puede ser declarado como un recurso y reutilizado, para darle a su aplicación un "tema" común.

Un UserControl es un control compuesto autónomo, con partes editables individualmente en el diseñador, y se utiliza mejor si necesita ver sus componentes y administrarlos en el diseñador. Un ControlTemplate, por otro lado, no expondrá sus componentes para su manipulación en el diseñador (aunque será visible). Por lo general, crea un UserControl para una página de detalles del Cliente o un navegador de visualización del Producto, o cualquier caso en el que no desee crear un Control completo, pero desea una vista detallada con la asistencia total del diseñador.

Un caso especial aquí es si usa el patrón MVVM . Muchas implementaciones de MVVM geniales usan UserControls como Vistas y Plantillas de Control y Estilos como recursos utilizados por esas vistas. La práctica de MVVM también minimiza la necesidad de un Control personalizado y tiene muchos otros beneficios.

(Para más información sobre MVVM, entre muchos otros, Google para artículos fantásticos de Josh Smith, Sacha Barber y Karl Shifflett)


Si está agregando sus propias propiedades de dependencia, necesitará su propia clase para definirlas.

Como quiera aplicar una plantilla a la clase, esta clase personalizada tendrá que derivarse de Control (como lo hace UserControl ).

El principal beneficio de escribir su propia clase de Control -derivado es que puede tener su plantilla redefinida para otros escenarios de uso, ya sea por usted dentro de la aplicación o por otros usuarios del tipo.

Hay muy poca sobrecarga en el uso de la clase UserControl . De hecho, si lo ves en Reflector.NET, verás que casi no tiene ningún código. En primer lugar, UserControl acaba de redefinir los metadatos en algunas propiedades de dependencia existentes (como hacer false valor predeterminado de FocusableProperty ).

A menos que necesite redefinir la plantilla del control de inmediato, puede dejarlo como un UserControl por ahora y cambiarlo más adelante si es necesario.