2009-04-30 17 views
135

Estoy empezando a acelerar en WPF y me gustaría crear un control WPF reutilizable.¿Cuál es la diferencia entre una Biblioteca de control de usuario y una Biblioteca de control personalizado?

Cuando miro las opciones para crear proyectos en Visual Studio, veo "Biblioteca de control de usuario de WPF" y "Biblioteca de control personalizado de WPF". No está claro para mí cuál es la diferencia entre ellos y mis búsquedas de Google no han arrojado ninguna explicación decente.

Me gustaría entender las diferencias entre ellos e idealmente ver algunos ejemplos de cuándo usar uno sobre el otro.

+2

No olvide anidar el contenido o cambiar la plantilla de un control como opciones. Puede hacer cambios bastante drásticos en un control de esta manera sin tener que escribir un control personalizado. – MichaC

+0

Justo lo que dijo MichaC. La mejor parte de WPF es que la creación de plantillas de controles existentes puede tener un gran impacto. Debería requerir controles personalizados raramente. Esto es diferente de WinForms donde incluso pequeños cambios en un control requerían un nuevo control derivado. –

+0

Todavía útil. Tener otra insignia de oro. – ouflak

Respuesta

99

En la práctica, los controles personalizados son algo que se implementa en el nivel de código mientras que se puede usar XAML para los controles de usuario. Los controles personalizados amplían una de las clases base de control de WPF y proporcionan funcionalidad adicional a través del código, por lo que toda la lógica y representación agregadas deben implementarse dentro del código.

Un control de usuario es técnicamente un control de contenido normal que puede extender en algunas partes del código, pero por lo general se extiende colocando otros controles dentro de él. Entonces, como Kent mencionó, UserControl es una agregación de otros controles. Esto limita considerablemente lo que puede hacer con un control de usuario. Es más fácil de usar pero más limitado que un control personalizado completo.

Estos controles tienen una pequeña diferencia desde el punto de vista del tiempo de ejecución. Al crear una aplicación y colocar un UserControl en ella, el árbol de control tendrá una plantilla concreta UserControl dentro de ella. Entonces, si consideramos un ejemplo débil de un botón especializado. Si estuviera usando un control de usuario, agregaría un botón dentro del elemento <UserControl>. Al utilizar un control personalizado, es muy probable que obtenga el control en sí mismo desde un botón. La diferencia sería visible en el árbol lógico.

Mientras que el control personalizado proporcionaría un árbol lógico similar a

  • Ventana
    • CustomButton

El control de usuario daría un árbol lógico de

  • Ventana
    • CustomButtonUserControl
      • botón

Así que al final del control de usuario es sólo un ContentControl normal, que se puede extender un poco y para los que pueden predefinir el contenido. El control personalizado proporciona una mayor flexibilidad al precio de la facilidad de implementación, ya que tiene que hacer toda la lógica y la interacción en el código en lugar de tener el beneficio de XAML.

Aunque después de todo esto, no creo que haya tanta diferencia en las plantillas de Visual Studio. Lo más probable es que el Control personalizado de Visual Studio solo cree un proyecto con un control personalizado vacío, mientras que el proyecto de Control de usuario es un proyecto con un control de usuario vacío. Luego puede agregar cualquier tipo de elementos al proyecto.

actualización

Y mi opinión sobre cuándo utilizar control personalizado y el control de usuario es que si se puede hacer algo con un control de usuario y el elemento de control adicional en el árbol lógico no te molesta, use un control de usuario ya que son mucho más fáciles de crear y mantener. Use un control personalizado solo si tiene una razón para no usar un control de usuario.

+1

¿Se puede usar un control personalizado para agregar otros controles? –

+0

¿Y qué hay del problema de skinnable/tentatable? –

+1

No estoy seguro de lo que quiere decir al agregar. No puede crear un control personalizado agregando otros controles. Sin embargo, puede derivar de un control del Panel, como StackPanel, Grid o Panel, para que pueda implementar un contenedor de diseño con un control personalizado (No estoy seguro si puede hacer eso con un Control de usuario). –

21

A Control representa un comportamiento que es personalizable (templatable), mientras que un UserControl es generalmente una agregación de nivel superior de Control s que es específico para una aplicación.

Más información disponible here.

+3

Ese es uno de los enlaces que encontré que no explicaba muy bien las cosas :). Supongo que una cosa que me falta es qué significa skinnable/templatable realmente y por qué no se puede hacer con un control de usuario. Además, la última frase de la publicación vinculada es "En términos generales y simplemente, los controles personalizados tienen una mejor flexibilidad y reutilización que los controles del usuario". Si eso es cierto, ¿por qué querría crear un control de usuario? –

Cuestiones relacionadas