2014-02-21 7 views
1

У меня есть изображение, которое я хочу добавить dropshadow эффект динамически, когда мышь над изображением.Извлечение значения свойства объекта изображения

`<Image Name="image1" Stretch="Fill" Source="/Start;component/Images/100px-The_alliance_logo.jpg" MouseEnter="MouseOver" />` 

Я хочу извлечь значение Name, когда мышь наводится над изображением. В C# я закодировал следующее.

private void MouseOver(object sender, MouseEventArgs e) 
    { 
      object ObjectName = new object(); 
      ObjectName = Convert.ToString(sender.GetType().GetProperty("Name").GetValue(sender, null)); 
      String Obj = (String)ObjectName; 
      Obj.Effect = shade(Obj); 
    } 

Я получаю сообщение об ошибке в Obj.Effect = shade(Obj);, который говорит: "„строка“не содержит определение для„эффекта“, а метод расширения„Effect“принимающий первый аргумент типа„строка“может быть (вы не указали директиву или ссылку на сборку?) «

Как это можно решить?

+0

Ваш вопрос был помечен как редактор ASP.NET. Я перевернул это назад. Хотя это было несколько очевидно, пожалуйста, будьте конкретны, когда вы отправляете вопрос, я добавил теги WPF и XAML. – nvoigt

ответ

0

Если вы настаиваете на выполнении кода позади, который не как WPF должен быть запрограммирован, то вам нужно будет сделать это:

private void MouseOver(object sender, MouseEventArgs e) 
{ 
    var image = sender as Image; 
    if(image != null) 
    { 
     image.Effect = yourShadowEffect; 
    } 
} 

Однако, есть хороший пример того, как чтобы сделать это способом WPF here, я настоятельно рекомендую вам взглянуть, потому что код за подходом ни к чему не приведет.

Edit:

В этом примере yourShadowEffect должна быть переменная типа System.Windows.Media.Effects.Effect, в вашем случае DropShadowEffect. Вы можете создать новый, вызвав конструктор:

yourShadowEffect = new DropShadowEffect(); 

Вы не должны делать это в MouseEventHandler, а есть это как переменная класса, чтобы сэкономить ресурсы и не создать новый каждый раз, когда парит пользователь это мышь над изображением.

+0

Я ищу, чтобы сделать динамический эффект тени, и у меня есть 12 изображений, поэтому я хочу уменьшить количество кода. Я получаю следующую ошибку: ** «System.Windows.Media.Effects.DropShadowEffect» является «типом», но используется как «переменная» **, в ** «image.Effect = yourShadowEffect;» ** линия. Не могли бы вы немного объяснить код? Большое спасибо за ответ. – soundstage

+0

Вы должны действительно сделать это в XAML. Если вы повторите код XAML, посмотрите стили и шаблоны управления. Я немного расширю свой пример, но сделаю себе одолжение и посмотрю в XAML как способ сделать это. Не используйте код позади. – nvoigt

+0

Еще раз спасибо. Я закончил кодирование всех эффектов dropshadow в XAML, поскольку я продолжал получать исключения StackOverFlow. – soundstage

Смежные вопросы