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 :

UserControl: Pourquoi le Binding sur ses propres propriétés ne fonctionne pas ?


Sujet :

Windows Presentation Foundation

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Août 2005
    Messages
    346
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2005
    Messages : 346
    Points : 119
    Points
    119
    Par défaut UserControl: Pourquoi le Binding sur ses propres propriétés ne fonctionne pas ?
    Bonjour,

    J'essaie de créer un Binding dans un UserControl sur une de ses propres propriétés de dépendance, et ça ne marche pas.

    Y-a-t-il quelque chose que je fais mal ou ce n'est pas possible ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    <UserControl x:Class="Test.Demo"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
        <Grid>
     
     
            <TextBlock Width="50" Grid.Row="1" Grid.Column="9" Text="{Binding ActualWidth, Mode=TwoWay}" Background="Black" Foreground="White"/>
        </Grid>
     
    </UserControl>
    Quand j'utilise ce le contrôle Demo dans une application WPF, je n'ai qu'une case noire (la valeur ActualWidth ne s'inscrit pas dans le TextBlock).

    Merci d'avance pour toute aide...

  2. #2
    Membre habitué
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mai 2009
    Messages
    81
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2009
    Messages : 81
    Points : 136
    Points
    136
    Par défaut
    La définition de ton binding n'est pas bonne:

    Text="{Binding ActualWidth, Mode=TwoWay}" va aller chercher la propriété "ActualWidth" de ton DataContext. Et comme elle ne doit pas exister, il n'affiche pas de valeur.

    Essaie avec :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Text="{Binding RelativeSource={RelativeSource Self},Path=ActualWidth, Mode=TwoWay}"
    Ou un truc dans le genre.

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Août 2005
    Messages
    346
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2005
    Messages : 346
    Points : 119
    Points
    119
    Par défaut
    Super! Merci beaucoup, c'était:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Text="{Binding RelativeSource={RelativeSource Self}, Path=ActualWidth}"

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Août 2005
    Messages
    346
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2005
    Messages : 346
    Points : 119
    Points
    119
    Par défaut
    J'ai un autre souci :

    J'aimerai faire le Binding avec une propriété de dépendance de mon UserControl.

    Je fais cela qui fonctionne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
     
    <UserControl x:Class="Test.Demo"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:local="Test">
        <Grid>
     
               <Image Source="{Binding RelativeSource={RelativeSource AncestorType={x:Type UserControl}}, Path=MyImage}"/>
    Mais cela ne fonctionne pas :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    <UserControl x:Class="Test.Demo"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:local="Test">
        <Grid>
     
               <Image Source="{Binding RelativeSource={RelativeSource AncestorType={x:Type local:Demo}}, Path=MyImage}"/>
    Il me dit que le type publique Demo n'existe pas.

    Même si la première solution est une alternative, j'aimerai savoir par curiosité comment cela devrait être fait pour indiquer en source relative mon UserControl de type Demo ?

  5. #5
    Expert confirmé
    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 : 37
    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
    Points : 4 062
    Points
    4 062
    Par défaut
    Peut-être :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    xmlns:local="clr-namespace:Test"
    ?
    Formateur expert .Net/C#/WPF/EF Certifié MCP disponible sur Paris, province et pays limitrophes (enseignement en français uniquement).
    Mon blog : pragmateek.com

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Août 2005
    Messages
    346
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2005
    Messages : 346
    Points : 119
    Points
    119
    Par défaut
    Ouah, génial, merci :-)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    <UserControl x:Class="Test.Demo"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:local="clr-namespace:Test">
        <Grid>
     
            <Image Source="{Binding RelativeSource={RelativeSource AncestorType={x:Type local:Demo}}, Path=MyImage}"/>
     
        </Grid>
     
    </UserControl>

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

Discussions similaires

  1. propriété onchangene fonctionne pas avec calendrier (datepicker) .?
    Par mehdi_scofield dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 19/08/2008, 11h28
  2. concat sur un string qui ne fonctionne pas
    Par zenux dans le forum Langage
    Réponses: 3
    Dernier message: 28/03/2008, 12h57
  3. Req SQL sur champ texte = date ne fonctionne pas acd "/"
    Par chapeau_melon dans le forum WinDev
    Réponses: 2
    Dernier message: 07/03/2008, 10h24
  4. [MySQL] Code PHP sur des UPDATE qui ne fonctionne pas
    Par bilou95 dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 08/10/2007, 12h57
  5. [VBA-E] SetFocus sur TextBox dans UserForm_Initialize ne fonctionne pas ?
    Par Jipété dans le forum Macros et VBA Excel
    Réponses: 18
    Dernier message: 27/11/2006, 12h39

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