IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Silverlight Discussion :

Comment dériver mon UserControl du contrôle natif ComboBox ?


Sujet :

Silverlight

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Avril 2002
    Messages
    190
    Détails du profil
    Informations forums :
    Inscription : Avril 2002
    Messages : 190
    Par défaut Comment dériver mon UserControl du contrôle natif ComboBox ?
    Bonjour,

    J'ai un problème de compréhension sur un de mes contrôles.
    En effet j'ai réussi un créer un user control et à le binder avec une liste.
    Et la pas de soucis, car ma liste d'item s'affiche correctement.
    Mais par contre lorsque je veux utiliser la méthode mycombo.SelectedValue, j'ai une erreur de compilation car les méthodes de l'objet ComboBox ne sont pas visibles sur mon UserControl.

    Mon contrôle "CustomComboBox" :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    <UserControl x:Class="MyApp.Controls.CustomComboBox"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
        <ComboBox ItemsSource="{Binding}">
            <ComboBox.ItemTemplate>
                <DataTemplate>
                    <StackPanel Orientation="Horizontal">
                        <TextBlock Text="{Binding Value}"/>
                        <TextBlock Text="(" Margin="5,0,0,0"/>
                        <TextBlock Text="{Binding Key}"/>
                        <TextBlock Text=")"/>
                    </StackPanel>
                </DataTemplate>
            </ComboBox.ItemTemplate>
        </ComboBox>
    </UserControl>
    Dans ma page XAML :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <combobox:CustomComboBox x:Name="mycombo" />
    Dans mon code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    this.mycombo.DataContext = myArray;
    Merci de votre aide.

  2. #2
    Expert confirmé
    Avatar de Skyounet
    Homme Profil pro
    Software Engineer
    Inscrit en
    Mars 2005
    Messages
    6 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Software Engineer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 6 380
    Par défaut
    Soit tu hérites vraiment de ComboBox soit tu fais comme tu fais avec ton UserControl mais tu dois recréer des Dependency Properties pour toutes les propriétés du ComboBox que tu veux exposer au niveau de ton MyComboBox.

    Par exemple tu vas devoir recréer une DP nommé SelectedItem qui sera bindé à la propriété SelectedItem de ta vraie combobox.

  3. #3
    Membre confirmé
    Inscrit en
    Avril 2002
    Messages
    190
    Détails du profil
    Informations forums :
    Inscription : Avril 2002
    Messages : 190
    Par défaut
    comme ça ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <UserControl x:Class="System.Windows.Controls.ComboBox" ...

  4. #4
    Expert confirmé
    Avatar de Skyounet
    Homme Profil pro
    Software Engineer
    Inscrit en
    Mars 2005
    Messages
    6 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Software Engineer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 6 380
    Par défaut
    Citation Envoyé par sorcer1 Voir le message
    comme ça ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <UserControl x:Class="System.Windows.Controls.ComboBox" ...
    Non en créant un nouveau templated control et en faisant

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    public class MyComboBox : ComboBox
    {
     
    }
    Mais tu dois redéfinir tout le template de ta combobox.

    Et c'est là que vient la question : tu veux faire quoi au juste ?
    Il doit y avoir une autre solution que l'héritage.

  5. #5
    Membre confirmé
    Inscrit en
    Avril 2002
    Messages
    190
    Détails du profil
    Informations forums :
    Inscription : Avril 2002
    Messages : 190
    Par défaut
    En fait je veux créer un contrôle ComboBox stylisé à ma sauce.
    Et pouvoir l'utiliser dans mes pages xaml comme un contrôle classique.

  6. #6
    Expert confirmé
    Avatar de Skyounet
    Homme Profil pro
    Software Engineer
    Inscrit en
    Mars 2005
    Messages
    6 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Software Engineer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 6 380
    Par défaut
    Citation Envoyé par sorcer1 Voir le message
    En fait je veux créer un contrôle ComboBox stylisé à ma sauce.
    Et pouvoir l'utiliser dans mes pages xaml comme un contrôle classique.
    Et il veut dire quoi le stylisé à ta sauce ?
    Si tu veux juste changer le design alors tu as simplement à modifier le template du contrôle (avec Expression Blend par exemple).

  7. #7
    Membre Expert
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 103
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 103
    Par défaut
    et les styles ... c'est fait pour les chiens ?

    pourquoi faire simple quand on peut faire compliqué cela dit...

    Tous les contrôles intégrés de WPF ou de Silverlight, sont customizables par l'utilisation des styles...
    les dictionnaires de ressources en wpf ou silverlight ça te dit quelque chose ?

    dans un dictionnaire de ressources tu va pouvoir redéfinir ta combobox de la sorte

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    <Style TargetType="{x:Type ComboBox}" x:Key="MyComboStyle">
    ...
    </Style>
    et dans ton projet si tu n'a pas oublié de lier ton dictionnaire de ressources dans l'app.xaml, tu pourra faire cela :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    <ComboBox Style="{DynamicResource MyComboStyle}" ...>
    </ComboBox>
    pour customiser les différents composants standards, il y a pléthore de tutoriels sur internet, et pour cela... Google est ton ami.

Discussions similaires

  1. Réponses: 3
    Dernier message: 01/05/2010, 00h11
  2. Réponses: 1
    Dernier message: 01/05/2008, 11h31
  3. Différence entre un driver ODBC et un accès natif à un SGBDR
    Par brice01 dans le forum Décisions SGBD
    Réponses: 4
    Dernier message: 13/12/2004, 17h24
  4. Comment faire mon choix
    Par SoubeigAbraham dans le forum Débuter
    Réponses: 1
    Dernier message: 07/10/2004, 14h29
  5. Réponses: 7
    Dernier message: 04/06/2004, 15h20

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo