在 MouseDown 事件上添加垂直线
Add a vertical line on MouseDown event
这看起来非常简单明了,但我无法真正让它发挥作用。
我有一个折线图,我通过绑定到列表来填充数据。
我想创建一个命令,当用户按下鼠标左键时添加一条垂直线。我希望能够在 ViewModel 中执行此操作,但代码隐藏也可以。
此外,我想为每个图表设置一条垂直线的限制。所以当用户点击并且已经有一条垂直线时,它应该删除旧的并在新的位置添加新的。
最简单的方法是添加事件处理程序:
YourControl.Click += (sender, args) =>
{
// Your code here
};
希望对您有所帮助
我来这里是为了回答我自己的问题,发现Konstantin的回答和我的做法是一样的。我会留下我的只是为了展示整个代码。
model.MouseDown += (s, e) =>
{
if (e.ChangedButton == OxyMouseButton.Left)
{
//Remove any existing Marker
while (plotView.Model.Series.Where(x => x.Title == "Marker Line").Count() > 0)
{
var oldmarker = plotView.Model.Series.Where(x => x.Title == "Marker Line").FirstOrDefault();
plotView.Model.Series.Remove(oldmarker);
}
// Add a point to the line series.
marker.Points.Add(marker.InverseTransform(new ScreenPoint(e.Position.X, model.DefaultYAxis.ScreenMin.Y)));
marker.Points.Add(marker.InverseTransform(new ScreenPoint(e.Position.X, model.DefaultYAxis.ScreenMax.Y)));
//Add the marker (vertical line)
plotView.Model.Series.Add(marker);
model.InvalidatePlot(false);
e.Handled = true;
}
e.Handled = false;
};
我还有一些修复工作要做(比如自动缩放标记),但这是我到目前为止所做的最接近的。
这看起来非常简单明了,但我无法真正让它发挥作用。
我有一个折线图,我通过绑定到列表来填充数据。
我想创建一个命令,当用户按下鼠标左键时添加一条垂直线。我希望能够在 ViewModel 中执行此操作,但代码隐藏也可以。
此外,我想为每个图表设置一条垂直线的限制。所以当用户点击并且已经有一条垂直线时,它应该删除旧的并在新的位置添加新的。
最简单的方法是添加事件处理程序:
YourControl.Click += (sender, args) =>
{
// Your code here
};
希望对您有所帮助
我来这里是为了回答我自己的问题,发现Konstantin的回答和我的做法是一样的。我会留下我的只是为了展示整个代码。
model.MouseDown += (s, e) =>
{
if (e.ChangedButton == OxyMouseButton.Left)
{
//Remove any existing Marker
while (plotView.Model.Series.Where(x => x.Title == "Marker Line").Count() > 0)
{
var oldmarker = plotView.Model.Series.Where(x => x.Title == "Marker Line").FirstOrDefault();
plotView.Model.Series.Remove(oldmarker);
}
// Add a point to the line series.
marker.Points.Add(marker.InverseTransform(new ScreenPoint(e.Position.X, model.DefaultYAxis.ScreenMin.Y)));
marker.Points.Add(marker.InverseTransform(new ScreenPoint(e.Position.X, model.DefaultYAxis.ScreenMax.Y)));
//Add the marker (vertical line)
plotView.Model.Series.Add(marker);
model.InvalidatePlot(false);
e.Handled = true;
}
e.Handled = false;
};
我还有一些修复工作要做(比如自动缩放标记),但这是我到目前为止所做的最接近的。