2010-12-15 99 views
3

je le code XAML suivant:Liaison d'un objet ImageSource directement à une source Image dans XAML/WPF?

<ListBox ItemsSource="{Binding Languages}"> 
    <ListBox.ItemTemplate> 
     <DataTemplate> 
      <StackPanel> 
       <Image Source="{Binding LanguageIcon}" /> 
       <Label Content="{Binding LanguageName}" /> 
      </StackPanel> 
     </DataTemplate> 
    </ListBox.ItemTemplate> 
</ListBox> 

et dans la classe de modèle:

class Language { 
    public string LanguageName; 
    public ImageSource LanguageIcon; 
} 

ma classe modelview contient:

public List<Language> Languages; 

qui est rempli avec:

Languages.Add(new Language("A",new BitmapImage(new Uri("Resources/a.ico", 
    UriKind.Relative)))); 
Languages.Add(new Language("B",new BitmapImage(new Uri("Resources/b.ico", 
    UriKind.Relative)))); 

Lorsque je lance le projet, tous les noms de mes langues sont affichés dans la liste, mais pas les icônes ... Pourquoi cela se produit-il et comment puis-je m'assurer que mes icônes sont affichées? (Je suis sûr que les ressources existent que les BitmapImages ne jettent pas d'erreurs)

+0

Je pense que vous devriez revoir votre concept et utiliser un ENUM pour la langue. Dans xaml, vous pouvez utiliser des convertisseurs de valeurs pour convertir l'énumération en son nom et son icône. – thumbmunkeys

+0

Le problème que vous rencontrez est le Image.Source sur l'objet est un objet ImageSource, mais quand il est exposé à travers Xaml c'est une chaîne pour un Uri. http://msdn.microsoft.com/en-us/library/system.windows.controls.image.source(v=VS.95).aspx – Agies

Répondre

5

Essayez de changer votre chemin Uri ...

"../Resources/a.ico" 

EDIT:

Si vous essayez pour référencer les images dans un essai différent en utilisant l'assemblage pack syntax ...

pack://application:,,,/ReferencedAssembly;component/Resources/a.ico 

... où ReferencedAssembly est l'assemblage contenant vos images.

+0

Ok mais maintenant je mets mon code C# (et aussi les images de ressources) dans un autre assemblage - dans l'assemblage à distance les images peuvent être chargées maintenant mais quand je veux les lier à l'assemblage local, aucune icône n'est affichée ... bien que l'image puisse être chargée ... étrange:/ –

+0

@A Bothe Tandis que j'ai répondu à votre question initiale ... J'ai édité la réponse pour fournir une solution à votre question de suivi –

+0

Ainsi il n'est pas possible de par exemple charger un bitmapImage dans un assembly et l'utiliser (par exemple créer un contrôle Image alors que la source est cette instance BitmapImage) dans l'autre assembly? –

0

Eh bien j'ai eu la raison de l'erreur, mais toujours pas de solution -

« Ressources/a.ico » simplement n'a pas été trouvé - il est donc pas de problème de XAML plus.

Mais c'est cette circonstance que a.ico est situé dans un autre assemblage. Alors maintenant, la question est: Comment accéder à cette icône?

Maintenant, je l'utilise pack://application:,,,/MyApp.ExtAssembly;/Resources/a.ico - mais toujours jeter une exception qu'il n'a pas été trouvé ...

+0

Problème de workaround: Je mets simplement les icônes dans un resx fichier, les charger dans une ressource BitmapImage en cas de besoin - et c'est tout: D .. de toute façon, merci à tous ceux qui m'ont soutenu! –