C# 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

我不熟悉使用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); // 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);
}