WPF ComboBox avec l'image
Je suis en train de remplir une Combo avec des images. Il est défini comme:
<ComboBox SelectedItem="{Binding SelectedLangComboItem}"
ItemsSource="{Binding Languages}">
<ComboBox.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<Image Source="{Binding Image}" />
<TextBlock Text="{Binding Label}" />
</StackPanel>
</DataTemplate>
</ComboBox.ItemTemplate>
</ComboBox>
Où les éléments sont les LanguageItem classes:
public class LanguageItem
{
public System.Drawing.Bitmap Image { get; set; }
public string Label { get; set; }
public string Culture { get; set; }
public LanguageItem(System.Drawing.Bitmap image, string label, string culture)
{
Image = image;
Label = label;
Culture = culture;
}
}
Maintenant, dans mon ViewModel c'tor je fais:
_Languages = new ObservableCollection<LanguageItem>();
System.Reflection.Assembly app = System.Reflection.Assembly.GetExecutingAssembly();
System.IO.Stream file;
file = app.GetManifestResourceStream("MyNamespace.Images.FLAG1.gif");
_Languages.Add(new LanguageItem(new Bitmap(file), "ITALIAN", "it-IT"));
file = app.GetManifestResourceStream("MyNamespace.Images.FLAG2.gif");
_Languages.Add(new LanguageItem(new Bitmap(file), "ENGLISH", "en-EN"));
this.SelectedLangItem = _Languages[0];
Les images sont intégrées des ressources. Ici, j'ai deux problèmes:
- Les images ne sont pas affichées;
- L'Élément n'est pas sélectionné, le SelectedLangItem est:
public LanguageItem SelectedLangItem
{
get { return _SelectedLangItem; }
ensemble
{
si (_SelectedLangItem == valeur)
retour;_SelectedLangItem = value; this.RaisePropertyChanged("SelectedLangItem"); } }
OriginalL'auteur Barzo | 2013-08-28
Vous devez vous connecter pour publier un commentaire.
Utilisation
comme il ont à mettre en œuvre ImageSource
Et en ce qui concerne non sélectionné: nom de la Propriété est "SelectedLangItem" alors que dans le code xaml SelectedLangComboItem si vous n'avez pas de fautes d'orthographe.
CODE:
XAML:
En utilisant comme chemin les œuvres suivantes: "/MyNamespace;component/Images/FLAG1.gif"
OriginalL'auteur vitaliy zadorozhnyy
Votre problème est que vous essayez de lier un
Image
à laImage.Source
de la propriété, qui est de typeImageSource
.La solution la plus simple est d'ajouter vos fichiers d'image dans un dossier et modifier le
Image
propriété dans votre classe pour une chaîne qui contient le chemin d'accès au fichier de l'image dans ce format:Ensuite, vous pouvez lier correctement cette chaîne (dont le Cadre sera converti en un
ImageSource
objet) à laImage.Source
propriété dans votreDataTemplate
.Image
propriété renvoie unSystem.Drawing.Bitmap
, qui est de WinForms. Si la restitution des biens WPFImageSource
, cela ne peut fonctionner correctement.qui êtes-vous souligné? Si c'est moi (et il semble que c'est à moi que vous l'avez commenté sur ma réponse)... je sais que déjà, merci... et si il est l'auteur de la question, alors peut-être que votre commentaire serait mieux si elle était jointe à leur question à la place?
Salut, merci à tous pour les suggestions. J'ai fait un peu de confusion 🙂 j'ai mis ImageSource type de LanguageItem.De l'Image et de modifier mon code comme suggéré par @vitaliy-zadorozhnyy, mais l'image n'est toujours pas affiché.
Pourquoi êtes-vous commenter ma réponse après la mise en œuvre de la vitalité de la suggestion? Tout ce que vous devez faire est de suivre les instructions simples dans ma réponse à le faire fonctionner.. mais c'est à vous.
J'essayais juste de préciser votre réponse dans le cas où il n'y avait aucune confusion quant à pourquoi une chaîne de travail, mais une image ne serait pas (comme le
Image
de contrôle doivent être en mesure d'afficher l'image...)OriginalL'auteur Sheridan
Essayer ci-dessous le code xaml et lier liste d'images dans la zone de liste déroulante...
Voyez ci-dessous... pour plus de compréhension de vivre exemple...
http://www.codescratcher.com/wpf/wpf-combobox-with-image/
OriginalL'auteur Code Scratcher