Wpf 在MouseDown事件上添加垂直线

Wpf 在MouseDown事件上添加垂直线,wpf,mvvm,line,oxyplot,Wpf,Mvvm,Line,Oxyplot,这看起来非常简单和直接,但我不能真正让它工作 我有一个折线图,通过绑定到列表来填充数据 我想创建一个命令,当用户按下鼠标左键时,添加一条垂直线。我希望能够在ViewModel中实现这一点,但代码隐藏也可以 此外,我想为每个图形设置一条垂直线的限制。因此,当用户单击并且已经有一条垂直线时,应该删除旧的垂直线,并在新位置添加新的垂直线。最简单的方法是添加事件处理程序: YourControl.Click += (sender, args) => { // Your code here

这看起来非常简单和直接,但我不能真正让它工作

我有一个折线图,通过绑定到列表来填充数据

我想创建一个命令,当用户按下鼠标左键时,添加一条垂直线。我希望能够在ViewModel中实现这一点,但代码隐藏也可以


此外,我想为每个图形设置一条垂直线的限制。因此,当用户单击并且已经有一条垂直线时,应该删除旧的垂直线,并在新位置添加新的垂直线。

最简单的方法是添加事件处理程序:

YourControl.Click += (sender, args) =>
{
    // Your code here
};

希望能有所帮助

我来这里回答我自己的问题,发现康斯坦丁的答案与我的方法有着相同的想法。我会留下我的,只是为了显示整个代码

    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;
    };

我仍有一些修复工作要做(如自动缩放标记),但这是我迄今为止所做的最接近的工作。

@lucas.mdo如果这是正确的,请将其标记为答案