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 :

Creation d'un controle avec sous controle


Sujet :

Silverlight

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre chevronné Avatar de Scorpyosis
    Homme Profil pro
    Inscrit en
    Janvier 2004
    Messages
    365
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2004
    Messages : 365
    Par défaut Creation d'un controle avec sous controle
    Bonjour a tous !

    Je rencontre un problème sur la création d'un contrôle dont le principe est le suivant.
    Par exemple, je veux créer un contrôle utilisateur voiture qui contiendra deux sous contrôles roues (Vue de profil).
    Ce que j'aimerai obtenir au final pour l'utilisation de mon contrôle dans une page quelconque c'est :

    Code xaml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    <my:voiture>
        <my:voiture.RoueGauche CouleurPneu="Red"/>
        <my:voiture.RoueDroite CouleurPneu="Bleu" />
    </my:voiture>

    C'est super basique, mais il y a un truc qui m'échappe car quand je crée mes contrôles roue et voiture et que dans l'objet voiture j'expose les propriétés RoueGauche et RoueDroite de type Roue, dans l'utilisation du contrôle voiture je ne peux pas accéder aux propriétés des objets RoueGauche et RoueDroite (CouleurPneu).

    Plutôt que de coller une tartine de code, voici ce que j'ai fait :
    - Voiture et Roue sont des usercontrol
    - Voiture a des attached property pour RoueGauche et RoueDroite
    - Roue a une dependency property sur CouleuPneu.

    D'après vous que manque t'il et où la mouche dans la soupe ?
    Pour info, plus que l'exemple, c'est le principe que je cherche a comprendre, un autre exemple avec des choux et des carottes me va très bien.

    D'avance merci pour votre aide

  2. #2
    Membre Expert
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2009
    Messages
    2 056
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Novembre 2009
    Messages : 2 056
    Par défaut
    Je sais pas trop , mais pourquoi utiliser des "attached propertie" alors que des dependencie properties suffisent? Mais sinon sur le raisonnement je vois pas ou ca pêche!

  3. #3
    Membre chevronné Avatar de Scorpyosis
    Homme Profil pro
    Inscrit en
    Janvier 2004
    Messages
    365
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2004
    Messages : 365
    Par défaut
    J'avais commencé par des attached properties car dans le designer Xaml de MainPage.xaml, il me soulignait la ligne <my:voiture.RoueGauche .. /> en mettant qu'il manquait des attached properties. Du coup, je les ai rajouté. Je viens de tester et je peux en effet mettre des dependency à la place, par contre cela ne résout pas mon problème.
    Chose intéressante, je peux accéder aux propriétés dans le code behind MainPage.xaml.cs !

    Donc quand je fait monObjetVoiture.RougeGauche.CouleurPneu = "Red", cela fonctionne dans le code behind mais impossible de le faire dans le xaml directement ! (Et biensûr c'est dans le xaml que je veux le faire.)

  4. #4
    Membre chevronné Avatar de Scorpyosis
    Homme Profil pro
    Inscrit en
    Janvier 2004
    Messages
    365
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2004
    Messages : 365
    Par défaut
    Si vous voulez tester je mets les différents codes

    ucRoue.xaml
    Code xaml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
        <Grid x:Name="LayoutRoot" Background="Blue">
        </Grid>

    ucRoue.xaml.cs
    Code c# : 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
    17
    18
    19
    20
    21
    22
    23
    24
    25
     
    public partial class ucRoue : UserControl
        {
            public ucRoue()
            {
                InitializeComponent();
            }
     
            public static readonly DependencyProperty CouleurPneuProperty = DependencyProperty.RegisterAttached(
            "CouleurPneu",
            typeof(String),
            typeof(ucRoue),
            new PropertyMetadata(String.Empty, new PropertyChangedCallback(CouleurPneuCallback)));
     
            public String CouleurPneu
            {
                get { return (String)GetValue(CouleurPneuProperty); }
                set { SetValue(CouleurPneuProperty, value); }
            }
     
            static void CouleurPneuCallback(DependencyObject d, DependencyPropertyChangedEventArgs args)
            {
     
            }
        }

    ucVoiture.xaml
    Code xaml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
        <Grid x:Name="LayoutRoot" Background="White">
            <my:ucRoue x:Name="objRoueGauche"></my:ucRoue>        
        </Grid>

    ucVoiture.xaml.cs
    Code c# : 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
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
     
    public partial class ucVoiture : UserControl
        {
            public ucVoiture()
            {
                InitializeComponent();
            }
     
            public ucRoue RoueGauche
            {
                get { return objRoueGauche ; }
                set
                {
                    objRoueGauche = value;
                    SetValue(objRoueGaucheProperty, value);
                }
            }
     
            public static readonly DependencyProperty objRoueGaucheProperty = DependencyProperty.RegisterAttached(
            "RoueGauche",
            typeof(ucRoue),
            typeof(ucVoiture),
            new PropertyMetadata(null, new PropertyChangedCallback(objRoueGauchePropertyCallback)));
     
            static void objRoueGauchePropertyCallback(DependencyObject d, DependencyPropertyChangedEventArgs args)
            {
     
            }
        }

    MainPage.xaml
    Code xaml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    <Grid x:Name="LayoutRoot">
            <my:ucVoiture x:Name="objVoiture">                      
                <!--<my:ucVoiture.RoueGauche CouleurPneu="Red"></my:ucVoiture.RoueGauche>-->
                <!-- Property RougeGauche doesn't have a value !-->            
            </my:ucVoiture>
        </Grid>

    MainPage.xaml.cs
    Code c# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    public partial class MainPage : UserControl
        {
            public MainPage()
            {
                InitializeComponent();
                //Ici ça fonctionne
                objVoiture.RoueGauche.CouleurPneu = "Rouge";
            }        
        }

    Je n'ai pas mis les references xmlns.
    Si vous prenez les contrôles, et que dans MainPaeg.xaml vous décommenter la ligne ca marche pas, pas d'accès aux propriétés alors qu'en code behind cela fonctionne !

  5. #5
    Membre Expert
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2009
    Messages
    2 056
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Novembre 2009
    Messages : 2 056
    Par défaut
    En faisant ca:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <my:ucVoiture.RoueGauche>
    tu tentes de donner une valeur à RoueGauche (au sens un nouvel objet roue à mettre dedans), et non je veux récupèrer la RoueGauche existante et modifier la couleur. Il n'est donc pas possible d'y affecter un attribut ( ici couleurPneu).

    Bon la je suis pas trop au frais, mais dans Voiture ta déclaration de DP est un peu bancal. D'un coté tu fais un Set de la DP, mais le Get tu récupère une instance qui n'est pas la DP...

  6. #6
    Membre chevronné Avatar de Scorpyosis
    Homme Profil pro
    Inscrit en
    Janvier 2004
    Messages
    365
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2004
    Messages : 365
    Par défaut
    En effet, j'ai corrigé ma dp qui devient :
    Code c# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    public ucRoue RoueGauche
            {
                get { return (ucRoue)GetValue(objRoueGaucheProperty); }
                set {SetValue(objRoueGaucheProperty, value);}
            }

    et j'ai compris la subtilité et maintenant dans MainPage.xaml j'ai ce code ci qui fonctionne :
    Code xaml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    <my:ucVoiture x:Name="objVoiture"> 
                <my:ucVoiture.RoueGauche>
                    <my:ucRoue CouleurPneu="Rouge">                    
                    </my:ucRoue>
                </my:ucVoiture.RoueGauche>            
            </my:ucVoiture>

    J'arrive au résultat que voulais initialement, le seul "truc" qui m'embête c'est que l'intellisense de visual studio propose tous les composants à ajouter au composant voiture. ce qui serait le top du top c'est qu'il ne propose que ucRoue.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [AC-2013] Creation de nouvelles pages avec le controle Onglet
    Par linaleti dans le forum IHM
    Réponses: 1
    Dernier message: 21/09/2013, 19h41
  2. Erreur avec le control ListView sous XP
    Par Eric_87 dans le forum VBA Access
    Réponses: 2
    Dernier message: 28/08/2012, 18h44
  3. Application server control avec Grid control
    Par JacK_soN dans le forum Entreprise Manager
    Réponses: 1
    Dernier message: 15/06/2009, 13h07
  4. creation dynamique de control avec code
    Par Elstak dans le forum VBA Access
    Réponses: 6
    Dernier message: 29/05/2007, 20h42
  5. Mettre à jour un controle par dblclik avec sous-formulaire
    Par lagratteCchouette dans le forum Access
    Réponses: 10
    Dernier message: 19/04/2006, 19h47

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