【发布时间】:2021-02-12 04:51:45
【问题描述】:
我想从 OxyPlot PlotView 图形中读取开始和结束坐标。以下是来自 ViewModel 的代码 sn-p。
plotModel.MouseDown += (s1, e1) =>
{
if (e1.ChangedButton == OxyMouseButton.Middle)
{
plotModel.MouseUp += (s2, e2) =>
{
if (e2.IsControlDown)
{
DateTime xstart = DateTime.FromOADate(xAxis.InverseTransform(e1.Position.X, e1.Position.Y, yAxis).X);
double ystart = yAxis.InverseTransform(e1.Position.X, e1.Position.Y, yAxis).Y;
DateTime xend = DateTime.FromOADate(xAxis.InverseTransform(e2.Position.X, e2.Position.Y, yAxis).X);
double yend = yAxis.InverseTransform(e2.Position.X, e2.Position.Y, yAxis).Y;
}
};
}
};
问题是我得到的xstart 和ystart 的值不正确,看起来y 的值只是一个随机数,而x 值在某种程度上是可以接受的。 xend 和 yend 是正确的。
我应该在代码中更改什么,还是有其他方法可以解决这个问题?
我使用中间按钮,因为它突出显示所选区域,但我找不到简单获取该区域坐标的方法。
【问题讨论】:
-
我认为转换本身是正确的。问题似乎是每当用户按下鼠标中键并且相同的鼠标操作也执行缩放操作时,您将一个新的事件处理程序连接到鼠标向上事件。因此,当此代码第二次运行时,鼠标向上处理程序将运行两次。它第一次运行时,我得到了正确的值。第二次轴值似乎已经改变了。
-
这似乎是问题所在,谢谢。您对如何在不每次都创建新事件的情况下运行事件有任何建议吗?我不知道如何举办这样的活动,所以我可以得到
e.Position,而无需创建新活动。 -
这取决于你想用这些信息实现什么。我将发布最直接的方式作为答案。