2010-05-11 4 views
1

À peu près, j'ai une zone de liste déroulante modifiable et je veux ajouter un bouton à droite du bouton déroulant qui efface l'élément sélectionné. Donc ...Ajout d'un bouton à une zone de liste déroulante dans wpf

| TextBox | X | v |

Je pensais quelque chose comme ...

<Style...> 
    <Setter Property="Template"> 
     <Setter.Value> 
      <ControlTemplate> 
       <ControlTemplate.Resources> 
        <Style TargetType="{x:Type TextBox}">...Add button here...</Style> 
       </ControlTemplate.Resources> 
       <ContentPresenter /> 
      </ControlTemplate> 
     </Setter.Value> 
    </Setter> 
</Style> 

Répondre

3

Je ne pense pas que votre approche proposée fonctionnera. Dès que vous définissez la propriété Template dans le style, vous devrez également redéfinir sa représentation visuelle. Vous pouvez cependant définir un ControlTemplate ajusté pour un TextBox (comme vous l'avez suggéré) dans la section Resources du ComboBox (pas dans son modèle!).

<ComboBox ...> 
    <ComboBox.Resources> 
     <Style TargetType="{x:Type TextBox}"> 
      <Setter Property="Template"> 
       <ControlTemplate TargetType="{x:Type TextBox}"> 
        <!-- define template for TextBox with an additional "clear" button --> 
       </ControlTemplate> 
      </Setter> 
     </Style> 
    </ComboBox.Resources> 
</ComboBox> 

Mais alors vous avez encore le problème la façon de gérer le clic sur ce bouton ...

Une solution propre serait de sous-classe ComboBox et fournir une ICommand qui efface la sélection actuelle Ensuite, vous devez remplacer le ControlTemplate de ComboBox, ajouter un bouton "effacer" à côté du bouton déroulant et lier ce bouton au nouveau ICommand. C'est certainement un peu de travail, mais au final, vous avez une solution propre que vous pouvez facilement étendre plus tard.

+0

Bonne réponse. La reformulation pour ce type d'expérience est assez standard et la façon de le faire ... et grâce à des visuels supplémentaires dans le modèle avec des liaisons d'événements, des commandes ou de nouvelles sous-classes, ils vous y mènent tous. –

Questions connexes