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;
}
}
Я просто пытаюсь сделать событие для изменения изображения согласно где вводимая мышь. Но я не могу сделать эту работу.
Править: Я сделал это в Windows Forms, и они работают 100% как, я хочу их к. Как я мог перевести что-то вроде этого в 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;
}
}
В вашем методе GetGlowingImage ()
вам необходимо создать новый ImageSource
Эта ссылка может помочь: Установка источника изображения WPF в коде
Редактировать:
Обратите внимание на разницу здесь в том, что в коде WindowsForms у вас есть Properties.Resources._64px_Andromedahero ___ copia - это имя переменной изображения, которая содержит данные изображения. В вашем коде WPF строка «filename ....» не является изображением или источником изображения, это просто строка, представляющая путь к файлу. Вам необходимо загрузить файл изображения, используя этот путь.
Я знаю, что это не имеет смысла, потому что во время разработки вы можете указать имя файла, и он создаст для вас ImageSource. В коде вам нужно создать ImageSource (или производный объект, например BitmapSource) и загрузить в него соответствующее изображение.
Изменить: Попробуйте это, непроверенный (и проверьте мою ссылку выше):
public ImageSource GetGlowingImage(string name)
{
string fileName = string.Empty;
switch (name)
{
case "Andromeda":
{
fileName = "HeroGlowIcons/64px-Andromeda.gif";
break;
}
}
BitmapImage glowIcon = new BitmapImage();
glowIcon.BeginInit();
glowIcon.UriSource = new Uri("pack://application:,,,/ApplicationName;component/" + fileName);
glowIcon.EndInit();
return glowIcon;
}
Что-то вроде:
BitmapImage myBitmapImage = new BitmapImage(new Uri("../../../../Images/folder.png", UriKind.Relative));
myBitmapImage.CacheOption = BitmapCacheOption.OnLoad;
Image.Source = myBitmapImage;
Судя по вашему редактированию, вы счастливы иметь статический набор изображений в ресурсах. Если это верно, вы можете сделать это:
<Application.Resources>
<BitmapImage x:Key="andromeda64" UriSource="andromeda_64px.jpg" />
</Application.Resources>
, а затем загрузить его как:
public ImageSource GetGlowingImage(string name)
{
switch (name)
{
case "Andromeda":
return (ImageSource)FindResource("andromeda64");
default:
return null;
}
}
FindResource требует, чтобы вы были в коде программной части для чего-то в визуальном дереве (например, обработчика событий). Если это не так, или если вы хотите иметь возможность загружать вещи, которых нет в словаре ресурсов, см. ответ Кори . Преимущество использования и повторного использования ресурсов заключается в том, что вам не нужно создавать BitmapImage каждый раз, когда вы его используете (хотя в этом случае накладные расходы на это будут незначительными).
Вы, вероятно, захотите вернуть BitmapSource
. В этой статье MSDN есть пример того, как создать BitmapSource
из файла изображения.
Рассмотрите возможность использования EventTrigger, чтобы сделать это полностью в XAML, вместо того, чтобы возиться с волшебными строками в коде.