2010-07-29 7 views
7

Je suis en train de lier une source d'image à mon XAML à C#lier une source d'image en XAML

cela fonctionne

<Image Source="images/man.jpg"></Image> 

cela ne fonctionne pas

<Image Source="images/{Binding imagesource}"></Image> 

où ImageSource est variable de chaîne dans le fichier C# de ce xaml et est mis égal à "man.jpg"

Répondre

0

imagesource doit être un objet réel Image, pas un string.

Voici une méthode qui permettra de créer un nouvel objet Image donné un chemin:

public BitmapImage Load(string path) 
{ 
    var uri = new Uri(path); 
    return new BitmapImage(uri); 
} 
+0

cela ne fonctionne pas pour une raison quelconque.Mon application refuse de le charger est bloqué à 100% – nooob

+0

Avez-vous essayé le chemin complet ou le chemin relatif? Devrait être le chemin complet. En outre, je sais que ma méthode fonctionne dans WPF ... peut-être que cela ne fonctionne pas dans Silverlight pour une raison quelconque. – devuxer

2

Vous ne pouvez pas coller une à mi-chemin de liaison à travers la valeur comme ça. C'est soit une liaison, soit ça ne l'est pas. En supposant ImageSource est accessible au public via votre DataContext, vous pouvez le faire:

<Image Source="{Binding imagesource}"/> 

Cependant, si elle a été réglée sur « man.jpg » il ne trouvera pas l'image. Soit vous entreprenez ImageSource le chemin complet (« images/man.jpg ») ou d'utiliser un convertisseur:

<Image Source="{Binding imagesource, Converter={StaticResource RelativePathConverter}}"/> 

Le convertisseur se préfixer « images/» sur sa valeur. Cependant, il peut être nécessaire que le convertisseur renvoie un ImageSource plutôt qu'un string.

+0

J'ai changé la source de l'image pour le chemin complet "images/man.jpg" il ne fonctionne toujours pas. Que voulez-vous dire qu'il devrait être accessible au public dans le DataContext? J'ai changé son modificateur d'accès au public et ai fait fonctionner la fonction aussi bien, ne fonctionne toujours pas. – nooob

+0

Quel est votre DataContext? Avez-vous le définir? Recherchez les erreurs de liaison dans la fenêtre de sortie de Visual Studio. –

+0

La propriété Image.Source n'est pas une chaîne, cela ne fonctionnera donc pas. –

3

ici est une façon comment le faire en XAML:

ajouter ceci à l'espace de noms:

xmlns:System="clr-namespace:System;assembly=mscorlib" 

puis ajoutez vos images chemins

<System:String x:Key="ImageRefresh">/Theme;component/Images/icon_refresh.png</System:String> 
<System:String x:Key="ImageSearch">/Theme;component/Images/icon_search.png</System:String> 

Voici comment vous l'utilisez

<Image Height="16" Source="{StaticResource ImageSearch}" Stretch="Uniform" Width="16"/> 

Cela fonctionne bien, mais si vous chargez votre style xaml dans Blend, il deviendra faux ..

Un objet de type "System.String" ne peut pas être appliqué à une propriété qui attend le type "System.Windows.Media". ImageSource ".

Je ne ai pas encore compris, comment remplacer System: String avec ce Media.ImageSource ... mais bon .. cela fonctionne pour moi dans Visual Studio.

+0

Source trouvée: http://stackoverflow.com/questions/347614/wpf-image-resources – Rumplin

+0

ImageSource en tant que ressource statique fonctionne dans Visual Studio 2012. – ljubomir

1

Les images m'ont mordu dans le passé. Il y a un certain ordre de recherche impliqué. Lorsque vous utilisez "image/man.jpg", vous pouvez vous référer à un fichier dans votre xap silverlight, ou par rapport à l'emplacement du fichier XAP. Par exemple, il pourrait être dans YourProject.Web/ClientBin/image/man.jpg.

Vous devez d'abord résoudre les problèmes en utilisant d'abord les URL complètes et vérifier si cela fonctionne.

Questions connexes