“Ne peut pas convertir la chaîne de ImageSource.” Comment puis-je faire cela?
private void HeroMouseEnter(object sender, MouseEventArgs e)
{
((Image)sender).Source = GetGlowingImage(((Image)sender).Name);
}
public ImageSource GetGlowingImage(string name)
{
switch (name)
{
case "Andromeda":
return "HeroGlowIcons/64px-Andromeda.gif";
default:
return null;
}
}
Je suis juste essayer de faire un événement de changement de l'image selon l'endroit où la souris est entré. Mais je ne peux pas faire ce travail.
Edit: je l'ai fait en Windows Forms et il travailler à 100% comme je le veux. Comment pourrais-je traduire quelque chose comme cela dans WPF?
void HeroMouseEnter(object sender, EventArgs e)
{
((PictureBox)sender).Image = GetGlowingImage(((PictureBox)sender).Name);
}
public Image GetGlowingImage(string name)
{
switch (name)
{
case "Andromeda":
return Properties.Resources._64px_Andromedahero___copia;
case "Engineer":
return Properties.Resources._64px_Engineerhero___copia;
default:
return null;
}
}
OriginalL'auteur Sergio Tapia | 2009-12-15
Vous devez vous connecter pour publier un commentaire.
Dans votre
GetGlowingImage()
méthode, vous devez générer un nouveauImageSource
Ce lien peut aider: Réglage de WPF source de l'image dans le code
Edit:
Voir la différence ici est que, dans le WindowsForms code que vous avez les Propriétés.Ressources._64px_Andromedahero___copia est le nom d'une Image variable qui contient les données de l'image. Dans votre code WPF de la chaîne "nom de fichier...." n'est pas une image ou de l'image source, c'est juste une chaîne de caractères qui représente le chemin d'accès au fichier. Vous devez charger le fichier image à l'aide de ce chemin.
Je sais que ça n'a pas de sens, car au moment de la conception, vous pouvez spécifier un nom de fichier et de la création de l'ImageSource pour vous. Dans le code, vous devez créer le ImageSource (ou dérivée de l'objet, c'est à dire: BitmapSource) et de charger l'image appropriée.
Edit: Essayer, non testé (et vérifier mon lien ci-dessus):
Dans le code, je vois une vous êtes de retour d'une chaîne et non une nouvelle ImageSource. N'avez-vous pas inclure la partie du code qui crée la nouvelle ImageSource? de retour "HeroGlowIcons/64px-Andromeda.gif"; // <- retourne une chaîne
Euh...j'ai testé un code très similaire à ce dans un Formulaire Windows. Je vais modifier ma question et j'espère que mon intention sera beaucoup plus claire. 😀
Malheureusement WindowsForms sens et fonctionne comme vous l'attendez. WPF en revanche n'a pas 😉 bien Sûr, avec WPF, je peux faire une nappe de l'INTERFACE utilisateur, mais dans la plupart des cas j'ai trouver j'ai besoin de sauter à travers des cerceaux juste pour accomplir quelque chose de simple.
OriginalL'auteur Cory Charlton
En passant par votre montage, vous êtes heureux d'avoir un ensemble statique d'images dans les ressources. Si c'est correct, vous pouvez le faire:
puis la charger comme:
FindResource vous oblige à être dans le code-behind pour quelque chose dans l'arborescence visuelle (par exemple, un gestionnaire d'événement). Si ce n'est pas le cas, ou si vous voulez être en mesure de charger des choses qui ne sont pas dans un dictionnaire de ressources, voir Cory répondre. L'avantage de l'utilisation et de la réutilisation de ressources, c'est que vous n'avez pas besoin de créer un BitmapImage chaque fois que vous utilisez (même si dans ce cas les frais généraux de le faire sera insignifiant).
OriginalL'auteur itowlson
Quelque chose comme:
La mise en page est en train de faire quelque chose de semblable à cela au moment de l'exécution.
Papuccino, c'est faire la même chose. Vous êtes en train de charger l'image existante dans un BitmapImage. De toute façon, un objet de C# doit être créé au moment de l'exécution à partir d'un fichier.
Si ses images sont dans un ResourceDictionary, il peut y accéder par le nom à l'aide FindResource, sans avoir besoin d'instancier un nouvel BitmapImage. (Bien sûr, WPF sera toujours l'instanciation de toutes ces images lors du chargement des ressources, mais c'est un coût unique -- n'a pas à être payé chaque fois qu'il passe.)
OriginalL'auteur Daniel
Vous voulez probablement pour retourner un
BitmapSource
. Cette Article MSDN a un exemple de comment créer unBitmapSource
partir d'un fichier image.OriginalL'auteur Andy
Envisager l'utilisation d'un EventTrigger pour ce faire complètement dans le code XAML au lieu de jouer avec la magie des chaînes dans le code derrière.
Ce lien pourrait aider
OriginalL'auteur vanja.
plus si vous avez l'intention de changer le fond d'une Grille ou tout autre comité que le Système de soutien.De Windows.Médias.Badigeonner avec un clic d'un bouton
OriginalL'auteur abbaty48
OriginalL'auteur Setar