Pergunta

Estou criando um controle personalizado.

Eu quero o modelo para este controle para utilizar diferentes controles para o controle de raiz com base no valor de uma propriedade de dependência chamado CanExpand. CanExpand é definido na classe controle personalizado.

Se CanExpand é verdade, eu quero exibir usando um Expander:

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

Se CanExpand é falso, eu quero exibir usando um HeaderedContentControl vez:

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

Pensei em usar um DataTemplateSelector, mas este é um ControlTemplate não um DataTemplate e não há nenhuma propriedade seletor para o modelo de um controle.

Não consigo definir os diferentes controles para visível / oculto com um gatilho porque o conteúdo filho só podem viver sob o mesmo controle. Além disso, eu acho que você não pode alterar a propriedade de conteúdo usando um Trigger.

Todas as sugestões?

Graças.

Foi útil?

Solução

Dentro do seu estilo, defina a propriedade ControlTemplate para o estado padrão e, em seguida, tem um gatilho que define a propriedade ControlTemplate para um modelo diferente. Por exemplo:

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

Tenha em mente que você pode ter um gatilho na mesma propriedade de vários valores, cada valor obter um modelo completamente diferente.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top