我有一张图片,我想在鼠标悬停在图片上时动态添加 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);
收到错误,其中说:“'string'不包含'Effect'的定义,也没有扩展方法'Effect'接受'string'类型的第一个参数可以找到(你错过了使用指令或汇编引用吗?)“
我该如何解决?
答案 0 :(得分:0)
如果你坚持做代码隐藏,不应该如何编程WPF,那么你需要这样做:
private void MouseOver(object sender, MouseEventArgs e)
{
var image = sender as Image;
if(image != null)
{
image.Effect = yourShadowEffect;
}
}
但是,有一个很好的例子说明如何以WPF方式here进行操作,我强烈建议你看一下,因为代码隐藏的方法会让你无处可去。
编辑:
在此示例中,yourShadowEffect
应该是System.Windows.Media.Effects.Effect
类型的变量,在您的情况下为DropShadowEffect
。您可以通过调用构造函数来创建一个新的:
yourShadowEffect = new DropShadowEffect();
你不应该在你的MouseEventHandler中这样做,而是把它作为一个类变量来节省资源,而不是每次用户将鼠标悬停在图像上时都不创建新资源。