C# WPF是否从动态图像向代码隐藏发送值?
我不熟悉使用WPF表单,我已经创建了一个显示数据库中图像的页面,但是尽管搜索了几天,我还是找不到知道哪个图像上有鼠标悬停或鼠标点击事件的方法 要设置我拥有的图像,请执行以下操作:C# WPF是否从动态图像向代码隐藏发送值?,c#,wpf,xaml,C#,Wpf,Xaml,我不熟悉使用WPF表单,我已经创建了一个显示数据库中图像的页面,但是尽管搜索了几天,我还是找不到知道哪个图像上有鼠标悬停或鼠标点击事件的方法 要设置我拥有的图像,请执行以下操作: public class RBimageData { private string _Title; public string Title { get { return this._Title; } set { th
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); // get parts from database
List<RBpartsImages> rbImages = rbPartsList.RBparts;
List<RBimageData> md = new List<RBimageData>();
foreach (RBpartsImages img in rbImages)
{
RBimageData m = new RBimageData
{
Title = img.ImageFilename,
ImageID = "id_"+img.PartNum,
ImageData = LoadImage(rbPartsList.FilePath,img.ImageFilename) }; // provides BitmapImage URI for image
md.Add(m);
}
RBbox.ItemsSource = md.ToArray();
它不能与x:Name=“{Binding ImageID}”一起使用。。我找不到任何东西可以让我识别哪个图像被点击了,你能帮忙吗
谢谢。当您在“代码隐藏”中引用此
时,它指向窗口对象。您正在查找图像
控件的标记
属性
为此,我建议在Image
控件上定义MouseEnter=“IdentifyPartImage\u MouseEnter”和MouseLeave=“IdentifyPartImage\u MouseLeave”
事件,然后sender
参数将是Image
对象
在您的XAML中:
<Button>
<Image Source="{Binding ImageData}"
HorizontalAlignment="Stretch"
VerticalAlignment="Top"
Stretch="UniformToFill"
Tag="{Binding ImageID}"
MouseEnter="IdentifyPartImage_MouseEnter"
MouseLeave="IdentifyPartImage_MouseLeave"/>
</Button>
谢谢,这也是一个非常简单的解决方案。你怎么知道的?事件的发送者总是事件处理程序所附加的元素。请注意,实际上根本不需要使用图像的标记。您还可以将鼠标事件处理程序保留在按钮上,然后访问按钮(然后是发送方)的DataContext。它将保存对相应项目对象的引用,因此您可以通过((RBImageData)((按钮)发送者).DataContext.ImageID
访问其ID作为注释,您可以直接分配RBbox.ItemsSource=md代码>。ToArray是多余的。可能重复
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());
}
<Button>
<Image Source="{Binding ImageData}"
HorizontalAlignment="Stretch"
VerticalAlignment="Top"
Stretch="UniformToFill"
Tag="{Binding ImageID}"
MouseEnter="IdentifyPartImage_MouseEnter"
MouseLeave="IdentifyPartImage_MouseLeave"/>
</Button>
private void IdentifyPartImage_MouseEnter(object sender, MouseEventArgs e)
{
var imgId = ((Image)sender).Tag.ToString();
Debug.WriteLine("id: {0}, {1}", "imageID", imgId);
}