Como posso trocar controles baseados em uma propriedade de dependência?
-
05-07-2019 - |
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.
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.