是否可以使用事件访问xaml中的特定资源?WPF OnMouseEnter使用事件更改图像
我试图让鼠标进入网格时图像发生变化,但问题是我无法从事件中更改图像。
我想要做的事,如:
OnMouseEnter(object sender, MouseEventArgs e) {
((Image)GetResource("logo")).Source = "pathToImage.jpg";
}
其中“标志”是图像资源的名称。
是否可以使用事件访问xaml中的特定资源?WPF OnMouseEnter使用事件更改图像
我试图让鼠标进入网格时图像发生变化,但问题是我无法从事件中更改图像。
我想要做的事,如:
OnMouseEnter(object sender, MouseEventArgs e) {
((Image)GetResource("logo")).Source = "pathToImage.jpg";
}
其中“标志”是图像资源的名称。
看来你只是想设置您的XAML声明某处图像元素的Source属性。所有你需要做的是设置x:Name
属性,这将产生在你的窗口类的成员,像
<Image x:Name="image"/>
现在,您可以直接访问该元素在后面的代码和值分配给这样的Source属性:
image.Source = new BitmapImage(new Uri("pathToImage.jpg"));
Working,thanks! – Mike
如果要连接在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
}
嗯,不能得到xaml文件来编译。 :( – Mike
)您可以直接绑定到静态属性,包括更改通知,而不是实现单例。请参见:http://10rem.net/blog/2011/11/29/wpf-45-binding-and-change -notification-for-static-properties – Clemens
var image = element.FindResource(“logo”)as Image; is is exception:System.Windows.ResourceReferenceKeyNotFoundException:“logo”resource not found – Mike
“我无法从事件中更改图像”是什么意思?你的代码没有编译,还是运行时错误?除此之外,通常不需要声明UI元素作为资源。那么你想达到什么目的? – Clemens
我正在尝试使用事件更改窗体上图像元素的图像源。当mouseEnter事件在特定元素上触发时,我希望能够更改不同元素的图像。 – Mike