2010-01-27 11 views
8

Supongamos que tenemos un muy 'XAML largo' ControlTemplate para nuestro Control. Y queremos para agregar solo 1 Botón a la Plantilla. MSDN afirma que 'No hay forma de reemplazar solo una parte del árbol visual de un control'. ¿Realmente tengo que copiar todo ese ControlTemplate y agregarle mi botón?WPF ControlTemplate parcial reemplazar

O: ¿Hay alguna posibilidad de cómo proporcionar algún tipo de interfaz a un elemento específico? Por ejemplo, un TextBox, para que todos puedan moldearlo fácilmente, sin tener que repetir todo el ControlTemplate.

Gracias!

+0

¿Por qué no solo, oh, no sé ... agregar el botón a la plantilla? – Will

+0

Porque la solución usa ese control y cada proyecto decide qué botones agregar –

Respuesta

7

Como ha dicho qntmfred, no puede hacer esto directamente. Sin embargo, si posee el control que desea personalizar (lo que suena como lo hace), puede hacerlo agregando propiedades de personalización adecuadas, como una propiedad CustomButtons (a la que cada usuario del control podría agregar sus propios botones para) o una propiedad ExtensionContent (que cada usuario del control podría establecer para cualquier contenido que quisieran: dejarlo vacío, agregar un solo control o agregar un panel con tantas cosas como quisieran). Su ControlTemplate no asignaría ninguna semántica a estas propiedades, sino que simplemente las alojaría tal como se le asignaron. Por ejemplo, supongamos que proporcionó una propiedad ExtensionContent. Su ControlTemplate podría presentar esta usando un ContentPresenter:

<ContentPresenter ContentSource="ExtensionContent" /> 

Y sus usuarios podría poner lo que quisieran en ella:

<s:StefansControl> 
    <s:StefansControl.ExtensionContent> 
    <StackPanel Orientation="Horizontal"> 
     <TextBlock Text="I'm custom content" /> 
     <Button Click="DoSomethingSurprising_Click">Click me</Button> 
     <Image Source="something.jpg" /> 
    </StackPanel> 
    </s:StefansControl.ExtensionContent> 
</s:StefansControl> 

Otra posiblemente es proporcionar propiedades de estilo que se aplican a las partes de su control, de modo que los usuarios pueden diseñarlos (incluido el cambio de la plantilla de esa parte (solamente) del control) sin reemplazar todo el estilo/plantilla. Esta es una especie de idea de "interfaz con un elemento específico", p. proporcionar una propiedad FooBoxStyle que se aplica al cuadro de texto "foo".

En resumen, la idea es construir una cierta medida de "reemplazabilidad parcial" en la plantilla base, ya sea mediante el uso de contenido, estilos, plantillas o una combinación de estos. WPF no proporciona una noción general de "reemplazo parcial", pero puede proporcionar su propia noción específica de reemplazabilidad parcial siempre que pueda predecir qué tipo de reemplazos parciales se pueden requerir.

0

MSDN es correcto. Tengo que copiar todo el ControlTemplate.

Cuestiones relacionadas