none
Plantage : ImageBrush du fond d'un Panorama en Binding RRS feed

  • Question

  • Re-bonjour, encore moi ... :(

     

    Cette fois-ci c'est l'image de fond de Panorama que j'ai essayé de passer en dynamique, et du coup l'appli plante complètement :S elle refuse d’interpréter ça :

     

      <controls:Panorama.Background>
      <ImageBrush ImageSource="{Binding Source={StaticResource parametres}, Path=FondSource, Mode=OneWay}" Stretch="None" />
      </controls:Panorama.Background>
    

     

    Pour la variable parametres.FondSource , j'ai tenté avec tous les types possibles : string, ImageBrush, ImageSource...

    jeudi 28 juillet 2011 23:12

Réponses

  • Bon sans voir le code, je peux déjà affirmer un truc : on ne peut binder une ImageBrush:ImageSource, il faut que tu bindes plus haut :

     

     

     <controls:Panorama.Background="{Binding Source={StaticResource parametres}, Path=Test, Mode=OneWay}" >
    ...
    
    avec :

    	public ImageBrush Test{
    			get
    			{
                  return new ImageBrush() { ImageSource = new BitmapImage() { UriSource = new Uri("/ApplicationIcon.png", UriKind.Relative) } };
    	     	}
    		}
    

    voila !


    S'il vous plaît n'oublier pas de marquer la ou les réponses qui aident à résoudre votre problème. Pour que la discussion puisse être marquée comme résolue
    • Marqué comme réponse Neo33ASM jeudi 28 juillet 2011 23:39
    jeudi 28 juillet 2011 23:34
    Modérateur
  • et si tu veux garder ta string :

     

     <controls:Panorama.Background="{Binding Source={StaticResource parametres}, Path=BackgroundImage, Mode=OneWay}" >
    

    avec :

     

    	public ImageBrush BackgroundImage{
    			get
    			{
           return new ImageBrush() { ImageSource = new BitmapImage() { UriSource = new Uri(FondSource, UriKind.Relative) } };
    	   	}
    		}
    
    

    en pensant à faire un PropertyChanged de "BackgroundImage" dans ta propriété FondSource


    S'il vous plaît n'oublier pas de marquer la ou les réponses qui aident à résoudre votre problème. Pour que la discussion puisse être marquée comme résolue
    • Marqué comme réponse Neo33ASM jeudi 28 juillet 2011 23:39
    jeudi 28 juillet 2011 23:38
    Modérateur
  • derniere solution, le converter :

     

     

     public class StringToImageBrushConverter : IValueConverter
     {
      public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
      {
        return new ImageBrush() { ImageSource = new BitmapImage() { UriSource = new Uri(value as string, UriKind.Relative) } };
    	  }
    
      public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
      {
       return DependencyProperty.UnsetValue;
      }
     }
    

     


    avec 

     

    <controls:Panorama Background="{Binding Source={StaticResource parametres}, Path=FondSource, Converter={StaticResource StringToImageBrushConverter},Mode=OneWay}" >
    

    il faudra juste penser a déclarer le converter dans le App.xaml

     


    S'il vous plaît n'oublier pas de marquer la ou les réponses qui aident à résoudre votre problème. Pour que la discussion puisse être marquée comme résolue
    • Marqué comme réponse Neo33ASM vendredi 29 juillet 2011 00:40
    vendredi 29 juillet 2011 00:05
    Modérateur

Toutes les réponses

  • Peux tu nous donner une valeur possible de FondSource ? Il est possible aussi que ca plante au démarrage car FondSource == null ?


    S'il vous plaît n'oublier pas de marquer la ou les réponses qui aident à résoudre votre problème. Pour que la discussion puisse être marquée comme résolue
    jeudi 28 juillet 2011 23:18
    Modérateur
  • Bon sans voir le code, je peux déjà affirmer un truc : on ne peut binder une ImageBrush:ImageSource, il faut que tu bindes plus haut :

     

     

     <controls:Panorama.Background="{Binding Source={StaticResource parametres}, Path=Test, Mode=OneWay}" >
    ...
    
    avec :

    	public ImageBrush Test{
    			get
    			{
                  return new ImageBrush() { ImageSource = new BitmapImage() { UriSource = new Uri("/ApplicationIcon.png", UriKind.Relative) } };
    	     	}
    		}
    

    voila !


    S'il vous plaît n'oublier pas de marquer la ou les réponses qui aident à résoudre votre problème. Pour que la discussion puisse être marquée comme résolue
    • Marqué comme réponse Neo33ASM jeudi 28 juillet 2011 23:39
    jeudi 28 juillet 2011 23:34
    Modérateur
  • et si tu veux garder ta string :

     

     <controls:Panorama.Background="{Binding Source={StaticResource parametres}, Path=BackgroundImage, Mode=OneWay}" >
    

    avec :

     

    	public ImageBrush BackgroundImage{
    			get
    			{
           return new ImageBrush() { ImageSource = new BitmapImage() { UriSource = new Uri(FondSource, UriKind.Relative) } };
    	   	}
    		}
    
    

    en pensant à faire un PropertyChanged de "BackgroundImage" dans ta propriété FondSource


    S'il vous plaît n'oublier pas de marquer la ou les réponses qui aident à résoudre votre problème. Pour que la discussion puisse être marquée comme résolue
    • Marqué comme réponse Neo33ASM jeudi 28 juillet 2011 23:39
    jeudi 28 juillet 2011 23:38
    Modérateur
  • erratum, y'a un point en trop, il faut lire : "<controls:Panorama Background"

     

    ;)


    S'il vous plaît n'oublier pas de marquer la ou les réponses qui aident à résoudre votre problème. Pour que la discussion puisse être marquée comme résolue
    jeudi 28 juillet 2011 23:57
    Modérateur
  • derniere solution, le converter :

     

     

     public class StringToImageBrushConverter : IValueConverter
     {
      public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
      {
        return new ImageBrush() { ImageSource = new BitmapImage() { UriSource = new Uri(value as string, UriKind.Relative) } };
    	  }
    
      public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
      {
       return DependencyProperty.UnsetValue;
      }
     }
    

     


    avec 

     

    <controls:Panorama Background="{Binding Source={StaticResource parametres}, Path=FondSource, Converter={StaticResource StringToImageBrushConverter},Mode=OneWay}" >
    

    il faudra juste penser a déclarer le converter dans le App.xaml

     


    S'il vous plaît n'oublier pas de marquer la ou les réponses qui aident à résoudre votre problème. Pour que la discussion puisse être marquée comme résolue
    • Marqué comme réponse Neo33ASM vendredi 29 juillet 2011 00:40
    vendredi 29 juillet 2011 00:05
    Modérateur