2017-10-13 85 views
0

是否可以使用事件访问xaml中的特定资源?WPF OnMouseEnter使用事件更改图像

我试图让鼠标进入网格时图像发生变化,但问题是我无法从事件中更改图像。

我想要做的事,如:

OnMouseEnter(object sender, MouseEventArgs e) { 
((Image)GetResource("logo")).Source = "pathToImage.jpg"; 
} 

其中“标志”是图像资源的名称。

+0

“我无法从事件中更改图像”是什么意思?你的代码没有编译,还是运行时错误?除此之外,通常不需要声明UI元素作为资源。那么你想达到什么目的? – Clemens

+0

我正在尝试使用事件更改窗体上图像元素的图像源。当mouseEnter事件在特定元素上触发时,我希望能够更改不同元素的图像。 – Mike

回答

1

看来你只是想设置您的XAML声明某处图像元素的Source属性。所有你需要做的是设置x:Name属性,这将产生在你的窗口类的成员,像

<Image x:Name="image"/> 

现在,您可以直接访问该元素在后面的代码和值分配给这样的Source属性:

image.Source = new BitmapImage(new Uri("pathToImage.jpg")); 
+0

Working,thanks! – Mike

1

如果要连接在OnMouseEnter元素是FrameworkElement,那么你可以尝试做一些这样的:

OnMouseEnter(object sender, MouseEventArgs e) { 
    var element = sender as FrameworkElement; 
    var image = element.FindResource("logo") as Image; 
    image.Source = new BitmapImage(new Uri("pathToImage.jpg")); 
} 

否则,可能会改变你的从“资源”:

<Image x:Key="logo" Source="initialImage.jpg" /> 

喜欢的东西:

<Image x:Key="logo" Source="{Binding Source={x:Static LogoImage.SingletonInstance}, Path=Logo}" /> 

而且有一个S类沿线的omething:

public class LogoImage : INotifyPropertyChanged { 
    public static LogoImage SingletonInstance { get; } = new LogoImage(); 

    public ImageSource Logo { get; private set; } 
    public void SetLogo(ImageSource image) 
    { 
     Logo = image; 
     RaiseNotifyPropertyChanged(nameof(Logo)); 
    } 

    // Implement INotifyPropertyChanged 

} 
+0

嗯,不能得到xaml文件来编译。 :( – Mike

+0

)您可以直接绑定到静态属性,包括更改通知,而不是实现单例。请参见:http://10rem.net/blog/2011/11/29/wpf-45-binding-and-change -notification-for-static-properties – Clemens

+0

var image = element.FindResource(“logo”)as Image; is is exception:System.Windows.ResourceReferenceKeyNotFoundException:“logo”resource not found – Mike