visual tutorial studio development developing bootstrap apps xaml windows-runtime uwp win-universal-app uwp-xaml

xaml - tutorial - uwp vs wpf



¿Cuándo usar un control de plantilla sobre un UserControl? (2)

Estaba buscando algunos tutoriales sobre cómo crear controles personalizados en WinRT, y tengo una pregunta.

Digamos que quiero crear un control simple que contenga algunas cosas, como una cuadrícula con una imagen a la izquierda y un par de TextBlocks a la derecha.

Quiero decir, algo simple como:

<Grid Height="100"> <Grid.ColumnDefinitions> <ColumnDefinition Width="0.3*"/> <ColumnDefinition Width="0.7*"/> </Grid.ColumnDefinitions> <Image Source"/Assets/someRandomImage.png"/> <StackPanel Grid.Column="1" VerticalAlignment="Center"> <TextBlock Text="Some text" Margin="10,0,10,0" FontSize="24" FontWeight="SemiLight" TextTrimming="CharacterEllipsis"/> <TextBlock Text="Some random description..." Margin="10,5,10,0" FontSize="18" FontWeight="Light" Foreground="Gray" TextWrapping="Wrap" TextTrimming="CharacterEllipsis"/> </StackPanel> </Grid>

Me gustaría crear un UserControl con este contenido, por lo que podría verlo en el Diseñador XAML mientras estoy trabajando en su IU, y agregaría todas las Propiedades y Propiedades de Dependencia en el código de UserControl.

Luego vi que otro enfoque sería usar un control de plantilla, así que tendría que crear una clase que hereda de la clase de control, luego usar el código XAML anterior como plantilla y aplicarlo al control personalizado y agregar todo el Resto de la lógica allí.

Por supuesto, también tendría que agregar la propiedad x: Name a algunos UIElements dentro del control para poder interactuar con ellos, pero entiendes la idea.

Me preguntaba: ¿está bien usar uno de estos dos métodos o es mejor usar uno en particular y por qué? Además, me gusta usar UserControls ya que puedo verlos en la ventana del Diseñador y, en lugar de eso, no podría hacer eso con una plantilla, tendría que ejecutar la aplicación y crear una instancia del control para ver qué sucede. en realidad se parece a

Gracias por su ayuda, creo que no soy el único con esta duda, así que espero que esta pregunta también ayude a otros: D

Sergio


Crear un control de usuario es mucho más simple que crear un control personalizado. Para empezar, un control de usuario tiene soporte de diseñador. La desventaja de un control de usuario es que está limitado en comparación con un control personalizado.

Un control de usuario es excelente si desea crear un control que sea una composición de otros controles como en su ejemplo, pero suponga que desea crear un tipo especial de panel, entonces realmente tiene que crear un control personalizado.

Así que en resumen, el control de usuario para controles ''simples'' el control de usuario para controles complejos. Cualquier control de usuario puede ser creado por un control personalizado pero no al revés.


Control de usuario

  • Un UserControl es mucho más fácil de crear con Visual Studio o Blend, lo que le brinda un soporte de visualización de diseño decente.
  • Normalmente lo usas para componer una vista en tu aplicación desde múltiples controles. ''
  • Funciona mejor para vistas de pantalla completa o de ventana completa o si tiene vistas complejas que desea dividir en fragmentos de código más pequeños y posiblemente reutilizables.
  • Dicha vista a menudo se respalda con un modelo de vista correspondiente si elige adoptar el patrón MVVM.

  • Un problema con un UserControl es que, si bien puede reutilizarlo en varios lugares de su aplicación, es difícil realizar pequeños ajustes en la apariencia o el comportamiento en diferentes lugares de su aplicación, ya que no utiliza plantillas ni el árbol de IU. Se carga en el constructor.

  • Por lo general, solo es reutilizable dentro del alcance de la aplicación única.

Control personalizado

  • Un custom control o, en algunos casos, un templated control es el más adecuado para una pequeña parte de la IU que cumple un único propósito: visualiza un tipo de información único y específico.
  • A un control con plantilla se le puede cambiar su plantilla para ajustar las imágenes para un caso de uso particular. Le permite tener un botón que parece un botón predeterminado en una aplicación, uno redondeado en otro y otro compuesto únicamente de imágenes en otro. Lo hace más reutilizable, lo que tiene sentido si crea más de una aplicación o quiere compartir su increíble control con el mundo.
  • Un control personalizado bien escrito suele ser reutilizable en más de una aplicación, ya que no depende de la lógica empresarial de una aplicación en particular.
  • Normalmente se deriva de un control de plataforma existente, como Button , ToggleButton , ContentControl , Slider , TextBox o ListView para agregar o anular su lógica. Sin embargo, hay casos en los que tiene sentido hacer uno desde cero, haciendo una subclase de Control "virtualmente abstracto", ItemsControl , RangeBase , Shape o incluso FrameworkElement (los dos últimos no tienen plantilla).
  • El árbol visual de un control con plantilla se carga cuando se carga la plantilla, lo que puede ocurrir tan tarde como cuando la visibilidad del control se cambia por primera vez de Collapsed a Visible que permite diferir la carga de partes de su IU para obtener mejoras de rendimiento.
  • Debido a que la plantilla de control solo se carga una vez, son ideales para usar dentro de cualquier plantilla de datos de ItemsControl (listas, vistas de cuadrícula, etc.). Si utilizara un UserControl, su rendimiento realmente podría verse afectado porque el UserControl XAML se analiza una y otra vez.

Panel personalizado

Un custom panel es otro tipo de elemento de la interfaz de usuario que permite personalizar la forma en que establece sus elementos secundarios.