2009-10-22 10 views
1

Je crée un contrôle personnalisé.Comment échanger des contrôles basés sur une propriété de dépendance?

Je souhaite que le modèle de ce contrôle utilise des contrôles différents pour le contrôle racine en fonction de la valeur d'une propriété de dépendance appelée CanExpand. CanExpand est défini dans la classe de contrôle personnalisé.

Si CanExpand est vrai, je veux afficher à l'aide d'un Expander:

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

Si CanExpand est faux, je veux afficher à l'aide d'un HeaderedContentControl à la place:

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

Je pensais que l'utilisation d'un DataTemplateSelector, mais il s'agit d'un ControlTemplate non un DataTemplate et il n'y a pas de propriété de sélecteur pour le modèle d'un contrôle.

Je ne peux pas définir les différents contrôles à visible/caché avec un déclencheur, car le contenu enfant ne peut vivre que sous un seul contrôle. En outre, je ne pense pas que vous pouvez changer la propriété de contenu en utilisant un déclencheur.

Des suggestions?

Merci.

Répondre

2

À l'intérieur de votre style, définissez la propriété ControlTemplate sur l'état par défaut, puis disposez d'un déclencheur qui définit la propriété ControlTemplate sur un modèle différent. Par exemple:

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

Gardez à l'esprit que vous pouvez avoir un déclencheur sur la même propriété pour plusieurs valeurs, chaque valeur d'obtenir un modèle complètement différent.

+0

Je pensais que vous ne pouviez avoir que des EventTriggers dans les styles? –

+0

Non, les déclencheurs de propriété sont autorisés dans les styles. C'est lorsque vous placez des déclencheurs directement sur l'élément que vous ne pouvez utiliser que les déclencheurs d'événement. –

+0

C'est la bonne réponse :) – Anvaka

Questions connexes