2

我有一个名为 Location 的带有 Point 属性的节点类。我创建了这个类的几个对象,然后将它们放在通用列表中。在我的应用程序中,每个节点都由图像表示(节点位置 == 图像位置)。

为了渲染图像,我迭代我的节点列表并将图像添加到我的 WPF 主窗口上的 Canvas。基本上我列表上的第一项是我的 Canvas 的第一个孩子。

当我更改节点的位置时,渲染图像时也会自动更改。但是,如果我想使用 MouseMove 事件移动图像,我不知道如何从我的节点列表中访问特定元素。我怎么知道哪个元素是哪个?

4

2 回答 2

2

由于您以与节点列表中的节点相同的顺序将图像添加到 Canvas,因此您可以简单地获取 Canvas 子索引并通过该索引访问节点:

private void canvas_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
    var element = canvas.InputHitTest(e.GetPosition(canvas)) as UIElement;

    if (element != null)
    {
        int index = canvas.Children.IndexOf(element);
        node hitNode = nodelist[index];
    }
}
于 2013-10-19T20:59:19.293 回答
1

将鼠标单击/拖动/悬停在特定图像上并将其 (0,0) 点转换为画布。

Point relativePoint = image.TransformToAncestor(myCanvas)
                              .Transform(new Point(0, 0));

然后遍历您的列表并找到位置与 relativePoint 相同的图像。

这就是您如何找到捕获鼠标光标的那个。

这也是一篇关于在 wpf 中进行转换的好文章。

http://msdn.microsoft.com/en-us/library/ms750596.aspx

于 2013-10-19T18:53:29.077 回答