Pregunta

Estoy creando un control personalizado.

Quiero que la plantilla de este control use controles diferentes para el control raíz en función del valor de una propiedad de dependencia llamada CanExpand. CanExpand se define en la clase de control personalizado.

Si CanExpand es verdadero, quiero mostrarlo usando un Expander:

<ControlTemplate ...>
   <Expander ...>
      <!--...-->
      <ContentPresenter/>
   </Expander>
</ControlTemplate>

Si CanExpand es falso, quiero mostrarlo usando un HeaderedContentControl en su lugar:

<ControlTemplate ...>
   <HeaderedContentControl ...>
      <!--...-->
      <ContentPresenter/>
   </HeaderedContentControl>
</ControlTemplate>

Pensé en usar un DataTemplateSelector, pero este es un ControlTemplate no un DataTemplate y no hay ninguna propiedad de selector para la plantilla de un control.

No puedo configurar los diferentes controles como visibles / ocultos con un Disparador porque el contenido secundario solo puede vivir bajo un control. Además, no creo que pueda cambiar la propiedad de Contenido utilizando un Desencadenador.

¿Alguna sugerencia?

Gracias.

¿Fue útil?

Solución

Dentro de su estilo, establezca la propiedad ControlTemplate para el estado predeterminado y luego tenga un disparador que establezca la propiedad ControlTemplate en una plantilla diferente. Por ejemplo:

<Style ...>
    <Setter Property="ControlTemplate">
        <ControlTemplate ...>    
        </ControlTemplate>
    </Setter>
    <Style.Triggers>
        <Trigger Property="YourProperty" Value="WhateverValue">
            <Setter Property="ControlTemplate">
                <ControlTemplate ...>
                </ControlTemplate>
            </Setter>
        </Trigger>
    </Style.Triggers>
</Style>

Tenga en cuenta que puede tener un activador en la misma propiedad para varios valores, cada valor obtiene una plantilla completamente diferente.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top