WPF如何从动态图片发送值给代码后端?
WPF如何从动态图片发送值给代码后端?
我刚开始使用WPF表单,我创建了一个页面来显示来自数据库的图像,但是尽管我搜索了好几天,我仍然找不到一种知道哪个图像被鼠标悬停或鼠标点击事件触发的方法。
设置图像时,我使用了以下代码:
public class RBimageData { private string _Title; public string Title { get { return this._Title; } set { this._Title = value; } } private BitmapImage _ImageData; public BitmapImage ImageData { get { return this._ImageData; } set { this._ImageData = value; } } private String _ImageID; public String ImageID { get { return this._ImageID; } set { this._ImageID = value; } } } public MainWindow() { InitializeComponent(); RBpartsList rbPartsList = mongoDB.GetRBparts("elements", 1, 7); // 从数据库获取零件 ListrbImages = rbPartsList.RBparts; List md = new List (); foreach (RBpartsImages img in rbImages) { RBimageData m = new RBimageData { Title = img.ImageFilename, ImageID = "id_"+img.PartNum, ImageData = LoadImage(rbPartsList.FilePath,img.ImageFilename) }; // 为图像提供BitmapImage URI md.Add(m); } RBbox.ItemsSource = md.ToArray();
}
并且这些图像在XAML中显示,我使用Tag元素来保存ImageID:
但是在我的代码后台,this.Tag始终为null:
private void IdentifyPartImage_MouseEnter(object sender, MouseEventArgs e) { // this fails - tag is null var imgId = this.Tag.ToString(); Debug.WriteLine("id: {0}, {1}", "imageID", imgId.ToString()); }
使用x:Name="{Binding ImageID}"也无法工作...我找不到任何可以帮助我识别哪个图像被点击的方法,请帮忙,谢谢。
WPF发送动态图像到代码后台的原因是因为在代码后台引用"this"时,它指向的是窗口对象,而不是图像控件的"Tag"属性。解决方法是在XAML中定义"MouseEnter"和"MouseLeave"事件,并将事件绑定到图像控件上,这样"sender"参数就会是图像对象。然后可以通过将"Tag"属性转换为字符串来获取图像的ID。
解决方法中提到,事件的发送者始终是附加了事件处理程序的元素。另外,实际上不需要使用图像的"Tag"属性,也可以将鼠标事件处理程序绑定到按钮上,并访问按钮的DataContext属性。它将保存对应的项目对象的引用,因此可以通过"((RBImageData)((Button)sender).DataContext).ImageID"来访问其ID。
以上就是关于WPF发送动态图像到代码后台的原因以及解决方法的整理。这个问题是由于在代码后台引用"this"时指向了错误的对象,而正确的方法是使用图像控件的"Tag"属性来获取值。另外,在事件处理程序中可以通过"sender"参数来获取发送事件的对象。解决方法还提供了另一种方式,即使用按钮的DataContext属性来访问图像的ID。