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 :

Binding qui ne fonctionne pas dans la source d'une image?


Sujet :

Windows Presentation Foundation

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    284
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 284
    Points : 79
    Points
    79
    Par défaut Binding qui ne fonctionne pas dans la source d'une image?
    Bonjour à tous,

    Je voudrais afficher une image spécifique en fonction de la langue.
    J'ai donc fait quelque chose qui ressemble à ça.
    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    <ComboBox ItemsSource="{Binding Path=LanguageList, RelativeSource={RelativeSource AncestorType=UserControl}, Mode=OneWay}" IsSynchronizedWithCurrentItem="True">
    	<ComboBox.ItemTemplate>
    		<DataTemplate>
    			<StackPanel orientation="Horizontal">                                                
    				<Image Source="{Binding Path=Code, StringFormat='/Asset/Pict/Language/{0}.png'}" VerticalAlignment="Center" />
    				<TextBlock Text="{Binding Path=Name}" Margin="5,0,0,0" VerticalAlignment="Center" />
    			</StackPanel>
    		</DataTemplate>
    	</ComboBox.ItemTemplate>
    </ComboBox>

    mais rien ne s'affiche.
    J'ai donc fait ceci:
    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    <TextBlock Text="{Binding Path=Code, StringFormat='/Asset/Pict/Language/{0}.png'}" Margin="5,0,0,0" VerticalAlignment="Center" />
    <Image Source="{Binding Path=Code, StringFormat='/Asset/Pict/Language/{0}.png'}" VerticalAlignment="Center" />

    J'ai bien le chemin dans le TextBlock, d'ailleurs si je le remplace en dur dans la source, ça fonctionne.
    Pourquoi est ce que l'image ne s'affiche pas alors?
    par avance, merci pour vos idées.

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

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

    Informations forums :
    Inscription : Juillet 2007
    Messages : 576
    Points : 998
    Points
    998
    Par défaut
    Hello,

    La propriété Source d'un contrôle Image doit être de type BitmapSource.
    Avec ton code tu renvoies un String qui n'est pas compatible.
    Cela peut paraître déroutant car classiquement le processeur XAML convertit un string vers le bon path mais cela est fait uniquement si ce n'est pas un Binding.

    Dans ton cas, il faut que tu utilises un converter qui te renvoies un BitmapSource depuis l'URL.

    Par exemple:
    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
    public class ImageConverter : IValueConverter
    {
        public object Convert(object value, Type targetType,
                              object parameter, CultureInfo culture)
        {
            var uriOfTheImage = (string)value;
            try
            {
                return new BitmapImage(new Uri(uriOfTheImage));
            }
            catch 
            {
                return new BitmapImage();
            }
        }
     
        public object ConvertBack(object value, Type targetType,
                                  object parameter, CultureInfo culture)
        {
            throw new NotImplementedException();
        }
    }

    Bon courage !
    Jonathan ANTOINE - Découvrez mon livre: MVVM, de la découverte à la maîtrise.

    Microsoft MVP Client Application Development
    - MCPD Windows 4.0, etc.
    Mon blog : http://www.jonathanantoine.com

  3. #3
    Membre expert
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    2 210
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 2 210
    Points : 3 015
    Points
    3 015
    Par défaut
    Salut,

    La propriété Source du contrôle Image attend un objet de type ImageSource, donc binder une chaine de caractère ne marche pas.

    Le code suivant fonctionne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <Image Source="C:\image.jpg" />
    La chaine de caractère est interprétée et converti implicitement en ImageSource. Mais lors de binding, tu n'as pas le choix tu dois fournir une ImageSource ou bien utiliser un Converter qui se chargera de faire le travail.

    Pour info, pour obtenir une ImageSource à partir du chemin :
    Code c# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Image myImage3 = new Image();
    BitmapImage bi3 = new BitmapImage();
    bi3.BeginInit();
    bi3.UriSource = new Uri("smiley_stackpanel.PNG", UriKind.Relative);
    bi3.EndInit();
    myImage3.Stretch = Stretch.Fill;
    myImage3.Source = bi3;
    exemple trouvé ici

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

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

    Informations forums :
    Inscription : Juillet 2007
    Messages : 576
    Points : 998
    Points
    998
    Par défaut
    prems !!
    Jonathan ANTOINE - Découvrez mon livre: MVVM, de la découverte à la maîtrise.

    Microsoft MVP Client Application Development
    - MCPD Windows 4.0, etc.
    Mon blog : http://www.jonathanantoine.com

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    127
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Mars 2007
    Messages : 127
    Points : 131
    Points
    131
    Par défaut
    Hum, on peut très bien utiliser son système pour afficher l'image. Juste il faut plus de détail dans le stringformat :

    '/NomAssembly;component/Asset/Pict/Language/\{0\}.png'

    Attention, il me semble qu'entre silverlight et wpf il y a de légères différences. ici c'est pour du SL

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

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

    Informations forums :
    Inscription : Juillet 2007
    Messages : 576
    Points : 998
    Points
    998
    Par défaut
    Tu l'a testé réellement ?
    Jonathan ANTOINE - Découvrez mon livre: MVVM, de la découverte à la maîtrise.

    Microsoft MVP Client Application Development
    - MCPD Windows 4.0, etc.
    Mon blog : http://www.jonathanantoine.com

  7. #7
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    127
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Mars 2007
    Messages : 127
    Points : 131
    Points
    131
    Par défaut
    Yes, en sl
    Mais je suis quasi sur de pouvoir ressortir un projet wpf qui fonctionne comme ça

Discussions similaires

  1. Réponses: 3
    Dernier message: 29/12/2010, 08h55
  2. Réponses: 0
    Dernier message: 02/12/2009, 08h27
  3. function javascript qui ne fonctionne pas dans la balise <body>
    Par typikal dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 01/04/2008, 16h45
  4. Réponses: 6
    Dernier message: 22/05/2007, 09h55
  5. [FTP] fopen qui ne fonctionne pas dans tous les contextes ..
    Par Christophe Charron dans le forum Langage
    Réponses: 6
    Dernier message: 15/06/2006, 10h25

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