【问题标题】:Add a vertical line on MouseDown event在 MouseDown 事件上添加一条垂直线
【发布时间】:2015-09-17 15:24:50
【问题描述】:

这看起来非常简单明了,但我无法真正让它发挥作用。

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

我想创建一个在用户按下鼠标左键时添加一条垂直线的命令。我希望能够在 ViewModel 中执行此操作,但代码隐藏也可以。

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

【问题讨论】:

    标签: wpf mvvm line oxyplot


    【解决方案1】:

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

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

    希望对你有帮助

    【讨论】:

    • @lucas.mdo 如果正确,请将此标记为答案
    【解决方案2】:

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

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

    我还有一些修复工作要做(比如自动缩放标记),但这与我目前所做的一样接近。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-08-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-05-05
      相关资源
      最近更新 更多