2010-12-01 16 views
6

.WPF/Silverlight: Templating Custom Control PARTIALLY

Hola chicos,

Podemos escribir nuestros controles personalizados de tal manera que más adelante podemos volver a la plantilla que parcialmente? Significa, sin reemplazar todo el ControlTemplate, queremos cambiar/anular algunos de su apariencia?

Una forma, por supuesto, es la siguiente: copiar el código de ControlTemplate generic.xaml, modificar su aspecto y la sensación parcialmente, y lo utilizan en su xaml, como se muestra a continuación:

<MyCustomControl> 
     <MyCustomControl.Template> 
       <ControlTemplate> 

        <!-- paste the copied and modified code from generic.xaml here--> 

       </ControlTemplate> 
     </MyCustomControl.Template> 

     <!--other code--> 

</MyCustomControl> 

Pero el problema con este enfoque es que, hacemos nuestro xaml demasiado detallado. Y realmente no me gusta. Estoy buscando alguna solución que pueda salvarme de contaminar el xaml donde estoy usando mi control personalizado.

Gracias en previsión!

.

Respuesta

1

Estoy de acuerdo con la mayor parte de lo que Martin dice acerca ControlTemplates siendo más o menos una cosa de todo o nada en WPF y yo bastante mismo me he visto frustrado cuando llegué a esta conclusión.

Si está escribiendo su propio control personalizado, sin embargo, puede hacerlo más flexible por qué se compone u ofrece la capacidad de controlar el contenido de la plantilla. Por ejemplo, puede ver el control más nuevo WPF DataGrid, que tiene la capacidad de moldear diferentes piezas del control. Otros controles de contenido con encabezado a menudo tienen una plantilla separada para el contenido y la parte del encabezado del control que permite reemplazar uno pero no el otro.

+0

Creo que responde mi pregunta en la medida en que se puede hacer. Y dado que lo que no se puede hacer, no se puede responder, ¡entonces lo acepto! – Nawaz

1

Desafortunadamente la modificación de una plantilla de control es una proposición de todo o nada. Como señala, su XAML se vuelve muy detallado cuando modifica una plantilla de control compleja.

Un enfoque (que es bastante obvio de todos modos) es construir su interfaz de usuario a partir de piezas pequeñas composable con la esperanza de facilitar el trabajo de las plantillas de control.

Tiene la posibilidad de reutilizar estilos utilizando el Style.BasedOn Property. Desafortunadamente, esto no resuelve tu problema.

1

También estoy enfrentando el mismo problema cuando hacer una edición pequeña me obliga a copiar y pegar toda la plantilla de control predeterminada.

Sin embargo, puede definir varios diccionarios de recursos y usar <ResourceDictionary.MergedDictionaries> para separar su marcado de las plantillas de control.

Su marcado XAML será mucho más limpio y algo parecido a esto:

<Style> 
     <Setter Property="Template" Value="{StaticResource SomeRandomTemplate}" /> 
</Style>