2015-06-12 45 views
1

我是Windows Presentation Foundation的初学者。
我有一个帆布,其中有一个小方形帆布。在这个小广场画布里面我有一个图像。
我附加了一个事件处理程序到这个图像,当用户点击这个图像时,用户可以获取图像的当前位置。如何在WPF中获取图像的正确位置?

无论何时用户点击该图像,他/她都会得到一个提示消息框,用户可以在该消息框中获取要打印的当前图像位置。

当用户按左键单击图像时,一切正常。
但是,当用户第一次按下图像上的右键并突然按下鼠标左键单击相同的图像时,问题就出现了,它没有显示相同的值。

我没有附加任何事件处理程序的右键单击。

我使用以下代码:

Image objImage = new Image(); 
objImage .Height =12; 
objImage .Width = 12; 
objImage .Stretch = Stretch.UniformToFill;     
imageAck.MouseLeftButtonDown += new MouseButtonEventHandler(objImageMouseLeftButtonDown); 

private void objImageMouseLeftButtonDown(object sender, MouseButtonEventArgs e) 
{ 
    Point mouseCurrent = e.GetPosition(null); 
} 

我notgetting在mouseCurrent

+1

我们能不能从你的小的代码示例重现你的错误...请提供您重现错误*最小的代码示例* 。 – Sheridan

回答

0

相同的值使用e.GetPosition,这得到鼠标指针的相对到被点击的元件的位置,而不是该元素所属的画布。

要获得图像在Canvas上的实际位置,您需要使用Canvas.GetLeftCanvas.GetTop方法。这里有一个例子:

private void objImageMouseLeftButtonDown(object sender, MouseButtonEventArgs e) 
{ 
    double left = Canvas.GetLeft((UIElement)sender); 
    double top = Canvas.GetTop((UIElement)sender); 
} 

然后,您可以使用任何你需要的目的lefttop变量。

+0

其实我想显示我的用户控件(我在其中显示鼠标的位置)与我的图像相同的位置。我的意思是图像点击位置和用户控制位置应该是相同的。我可以使用上面的代码吗? –

+0

只是为了确认。点击图像 - >用户控制移动到图像位置?如果是这样,你可以使用'Canvas.SetLeft'和'Canvas.SetTop'来将你的用户控件的位置设置为我在示例代码中提供的'left'和'top'变量。 –

+0

我越来越左= NaN但顶部= -2;但是当我使用mouseCurrent时,值是678,408。我想要完全相同的价值。 –

0

最后,我得到了谷歌搜索一些时间回答.....

Point currentMousePosition = Mouse.GetPosition(Application.Current.MainWindow);