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

Windows Presentation Foundation Discussion :

Xaml et Dependency property


Sujet :

Windows Presentation Foundation

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Profil pro
    Inscrit en
    Août 2009
    Messages
    147
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 147
    Par défaut Xaml et Dependency property
    Bonjour,
    je ai une erreur toute bête en essayant de comprendre les dependency properties.
    On suivant les doc j'ai essayé de créer une property "Age" pour l'utiliser en xaml sur un userControl. Et là je n'arrive pas à lui passer une valeur et à l'affichage j'ai 0.
    Voici mon code:


    le xaml du UserControl:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    <UserCOntrol [...] 
     
       <Grid Height="62" width="148">
          <Label Margin ="28,22,0,12" Name="label1">Label</Label>
       </Grid>
    </UserControl>
    du code behind du control ou j'affecte la valeur age au label1:
    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
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
     
    namespace DependencyPropertiesWpfProject
    {
        /// <summary>
        /// Logique d'interaction pour UserControl1.xaml
        /// </summary>
        public partial class UserControl1 : UserControl
     
        {  
            public static    DependencyProperty ageProperty=
                DependencyProperty.Register("Age", typeof(int), typeof(UserControl1));
     
            public int Age
            {
                get
                {
                  return  (int)GetValue(ageProperty);
                }
                set
                {
                   SetValue(ageProperty, value);
                }
            }
            public   UserControl1() 
            { 
                InitializeComponent();
     
                label1.Content = Age;
     
            }
     
        }
    }
    Le xaml de Window1:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    dow x:Class="DependencyPropertiesWpfProject.Window1"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
            xmlns:uc="clr-namespace:DependencyPropertiesWpfProject"
        Title="Window1" Height="300" Width="300">
        <Grid Width="271" Height="241">
            <Canvas>
                <uc:UserControl1 Height="59" Width="152" Canvas.Left="41" Canvas.Top="31" Age="12"></uc:UserControl1>
            </Canvas>
        </Grid>
    </Window>
    Si quelqu'un a une piste...

    merci

  2. #2
    Membre Expert
    Avatar de Pragmateek
    Homme Profil pro
    Formateur expert .Net/C#
    Inscrit en
    Mars 2006
    Messages
    2 635
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Formateur expert .Net/C#
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 635
    Par défaut
    A priori la raison est que les propriétés ne sont affectées qu'après invocation du constructeur; donc dans le constructeur "Age" vaut toujours 0.

    Une solution serait d'utiliser du data-binding :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <Grid Height="62" width="148">
        <Label Margin ="28,22,0,12" Name="label1" Content="{Binding Age}"></Label>
    </Grid>
    et :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    public UserControl1()
    { 
    	InitializeComponent();
     
    	label1.DataContext = this;
    }

  3. #3
    Membre émérite Avatar de jmix90
    Homme Profil pro
    Consultant .Net
    Inscrit en
    Juillet 2007
    Messages
    576
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Consultant .Net
    Secteur : Conseil

    Informations forums :
    Inscription : Juillet 2007
    Messages : 576
    Par défaut
    +1 , si tu souhaites que cela fonctionne il faut utiliser un Binding, autrement, les DP se comportent comme une propriété classique.

  4. #4
    Membre éprouvé
    Profil pro
    Inscrit en
    Août 2009
    Messages
    147
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 147
    Par défaut
    merci à tout les deux.

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

Discussions similaires

  1. Dependency property et Binding XAML
    Par PPierre59 dans le forum Silverlight
    Réponses: 3
    Dernier message: 15/06/2010, 23h46
  2. Tableau de dependencies properties
    Par Ikit dans le forum Windows Presentation Foundation
    Réponses: 3
    Dernier message: 24/06/2009, 17h54
  3. Style, Triggers, Dependency Properties : pour un UserControl
    Par pascalwick dans le forum Windows Presentation Foundation
    Réponses: 2
    Dernier message: 12/02/2009, 09h40
  4. initialisation des dependency property
    Par ikeas dans le forum Windows Presentation Foundation
    Réponses: 1
    Dernier message: 13/08/2008, 22h22
  5. [XAML] CustomControl et property
    Par MrDuChnok dans le forum Windows Presentation Foundation
    Réponses: 2
    Dernier message: 06/05/2008, 08h34

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