l'utilisation de XAML pour se lier à un Système.De dessin.Image dans un Système.De Windows.Contrôle de l'Image
Je suis de la liaison d'une ListView à une liste d'objets, comme;
<ListView
ItemsSource="{ Binding Path=. }"
ItemTemplate="{DynamicResource EventTemplate}">
Je suis de liaison à un objet qui déclare deux propriétés;
string DisplayName { get; }
System.Drawing.Image Image { get; set; }
Je veux remplir un DataTemplate
mais je ne peux pas comprendre comment; si je fais cela dans mon template;
<StackPanel Orientation="Horizontal">
<Image Source="{ Binding Path=Image }" />
<TextBlock Text="{ Binding Path=DisplayName }" />
</StackPanel>
Le texte s'affiche mais l'image ne fonctionne pas. Ce que je fais mal? La sortie de débogage affiche
System.Windows.Data Error: 1 : Cannot create default converter
to perform 'one-way' conversions between types
'System.Drawing.Image' and 'System.Windows.Media.ImageSource'.
Consider using Converter property of Binding.
BindingExpression:Path=Image; DataItem='RealElement'
(HashCode=54308798); target element is 'Image' (Name='');
target property is 'Source' (type 'ImageSource')
OriginalL'auteur Steve Cooper | 2010-08-06
Vous devez vous connecter pour publier un commentaire.
Trouvé un moyen, je suis heureux avec. À l'aide de Reed Copsey le pointeur de la et ce tutoriel j'ai enveloppé le code
IValueConverter
.Voici le convertisseur de
System.Drawing.Image
àSystem.Windows.Media.ImageSource
;Alors que vous devez apporter le convertisseur d'image dans le code XAML comme une ressource;
Alors vous pouvez l'utiliser dans le code XAML de se lier directement à l'Image, en utilisant le nouveau convertisseur;
Ne peut pas vraiment dire -- la conversion est effectuée à chaque fois que c'est nécessaire par WPF -- donc, je pense que c'est juste une mise en œuvre interne de détail. Je ne pense pas qu'il n'y aurait aucune raison pour qu'il soit converti, mais il pourrait être intéressant de les coller dans un compteur et de voir...
memoryStream
n'est jamais fermée ou éliminés, est-ce une préoccupation ici? J'ai quelques très semblable code, qui pourraient même venir à partir de cette question, mais il est plus laid.Pour les futurs lecteurs, souvenez-vous de disposer de la précédente
Image
exemple dans le setter de la propriété. C'est en réponse à @Maslow commentaire.OriginalL'auteur Steve Cooper
Vous ne pouvez pas lier directement - vous devez avoir un certain type de convertisseur qui vous permet de convertir à partir d'un RIB de l'Image à un WPF Image.
Ici est une approche - il utilise un flux de mémoire pour extraire les données à partir de la GDI image et créer un BitmapSource objet.
Heureux d'entendre que vous êtes à aimer la série 😉
Il a été vraiment utile. Le modèle WPF est très différent de windows forms, et vos essais sont d'aider à débloquer dans mon cerveau.
Le
memoryStream
dans cet exemple est de ne jamais disposé, et non pas à l'aide de ou fermé. est-ce un problème?OriginalL'auteur Reed Copsey