2009-10-05 5 views
0

Je veux créer un contrôle personnalisé dérivé de ComboBox, si je crée un contrôle personnalisé à partir du modèle de studio visuel, il crée un défaut Style de contrôle et je dois ouvrir puis MSDN de ControlTemplate de ComboBox puis recréer une nouvelle fois tout le style ComboBox dans un generic.xamlComment remplacer uniquement ItemTemplate dans le contrôle personnalisé

Ce que je veux faire est, je veux créer un contrôle personnalisé dérivé de ComboBox et dans le generic.xaml Je veux seulement définir un ItemTemplate et non entier ControlTemplate.

Cependant, si je garde la ligne

static MyComboBox() 
{ 
    DefaultStyleKeyProperty. 
     OverrideMetadata(typeof(MyComboBox), 
     new FrameworkPropertyMetadata(
      typeof(MyComboBox))); 
} 

Je ne vois rien du tout si je retire la ControlTemplate de generic.xaml, si je définis clé ItemTemplate dans generic.xaml, comment dois-je initialiser mon constructeur statique afin de refelct seulement ItemTemplate?

Bien sûr, je peux repenser le thème xaml à partir de l'aide msdn mais n'y a-t-il pas un moyen facile de le faire?

+0

Avez-vous essayé d'utiliser un style qui définit le modèle de contrôle? Quelque chose comme Carlo

+0

@ Carlo, je ne veux pas définir ControlTemplate, je veux seulement définir ItemTemplate, si je set ControlTemplate alors je vais devoir écrire tout ce que la combobox par défaut a déjà défini. –

Répondre

1

J'ai récemment écrit ma propre liste déroulante personnalisée qui ne modifie que le ItemTemplate du contrôle. Le reste du style combobox est hérité de la liste déroulante par défaut.

Dans votre constructeur de contrôle personnalisé:

static CustomComboBox() 
{ 
     DefaultStyleKeyProperty.OverrideMetadata(typeof(CustomComboBox) 
         , new FrameworkPropertyMetadata(typeof(CustomComboBox))); 

} 

Et puis dans votre generic.xaml:

<Style TargetType="{x:Type local:CustomComboBox}" BasedOn="{StaticResource {x:Type ComboBox}}"> 
    <Setter Property="ItemTemplate"> 
     <Setter.Value> 
      <DataTemplate> 
       **INSERT YOUR ITEM TEMPLATE HERE** 
      </DataTemplate> 
     </Setter.Value> 
    </Setter> 
</Style> 

La propriété clé est mise ici BasedOn de style pour faire référence au contrôle standard combobox.

Espérons que cela aide!

Questions connexes