2 votes

Comment remplacer uniquement ItemTemplate dans un contrôle personnalisé ?

Je souhaite créer un contrôle personnalisé dérivé de ComboBox Cependant, si je crée un contrôle personnalisé à partir d'un modèle de visual studio, il crée un contrôle par défaut. Style de Control et je dois ensuite ouvrir le site de MSDN ControlTemplate de ComboBox puis recréer l'ensemble du ComboBox dans un fichier generic.xaml

Ce que je veux faire, c'est créer un contrôle personnalisé dérivé de ComboBox et dans le generic.xaml je ne veux définir qu'un ItemTemplate et non entières ControlTemplate .

Toutefois, si je conserve la ligne

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

Ensuite, je ne vois rien du tout si j'enlève l'élément ControlTemplate dans generic.xaml, mais si je définis la clé ItemTemplate dans generic.xaml, comment dois-je initialiser mon constructeur statique afin de refléter seulement ItemTemplate ?

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

4voto

clay richardson Points 46

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

Dans le constructeur de votre contrôle personnalisé :

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

 }

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 clé ici est de définir la propriété BasedOn du style pour qu'elle fasse référence au contrôle combobox standard.

J'espère que cela vous aidera !

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X