Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/334.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Oxyplot-编辑线系列中的左键单击标签_C#_Winforms_Oxyplot_Tracker - Fatal编程技术网

C# Oxyplot-编辑线系列中的左键单击标签

C# Oxyplot-编辑线系列中的左键单击标签,c#,winforms,oxyplot,tracker,C#,Winforms,Oxyplot,Tracker,我正在Oxyplot中绘制一些不同的线系列(在C#中,使用Windows窗体),它们的范围都大不相同。为了使每个序列仍然可见,我将它们的所有值缩放到0到1的范围。当然,这里的问题是,序列的实际值不能再显示了,所以我想知道是否可以更改显示数据点的X和Y值的左键单击事件来解决这个问题。如果可能的话,我希望这样,当用户点击一个数据点时,显示的Y值将缩小到原始值,而图形保持缩小 例如,我有一个从130到150的Na+值,然后我将其缩放为0和1。但是当用户单击数据点时,我希望它显示Y=140,而不是0.5

我正在Oxyplot中绘制一些不同的线系列(在C#中,使用Windows窗体),它们的范围都大不相同。为了使每个序列仍然可见,我将它们的所有值缩放到0到1的范围。当然,这里的问题是,序列的实际值不能再显示了,所以我想知道是否可以更改显示数据点的X和Y值的左键单击事件来解决这个问题。如果可能的话,我希望这样,当用户点击一个数据点时,显示的Y值将缩小到原始值,而图形保持缩小

例如,我有一个从130到150的Na+值,然后我将其缩放为0和1。但是当用户单击数据点时,我希望它显示Y=140,而不是0.5。由于每个线条系列都有不同的比例因子,这也意味着我必须分别编辑每个系列的标签

那么,是的,在当前版本中有可能出现类似的情况吗?提前谢谢


编辑:我想出来了,请看下面我的答案

您不能直接更改显示的数据,但是您可以在oxyplot中监听mousedown事件,如下所示:

var model= new PlotModel();
model.MouseDown += Model_MouseDown;

private void Model_MouseDown(object sender, OxyMouseDownEventArgs e)
{
    var controller = sender as PlotController;
    var position = e.HitTestResult;
}

使用
position
的值,您可以计算回实际值并将其显示在其他位置

我不确定我是否应该回答我自己的问题,但我最终找到了答案。不管怎样,结果证明我不能访问任何需要的属性,所以我只是为数据点创建了自己的类,并为缩放值包含了一个属性。事实证明,跟踪器能够显示数据点的其他属性,但标准数据点只有X和Y。然后我修改了TrackPerformATString以显示缩放值,而不是实际值

        public class MeasurePoint : IDataPointProvider
    {
        public MeasurePoint(double x, double y, double scale)
        {
            X = x; Y = y; Scale = scale;
        }

        public double X { get; set; }
        public double Y { get; set; }
        public double Scale { get; set; }
        public DataPoint GetDataPoint()
        {
            return new DataPoint(X, Y);
        }
    }
这就是我创建的类,这就是我最终处理这些点的方式

            var points = new MeasurePoint[Y.Count - 1];
        for (int i = 0; i < Y.Count; i++)
        {
            points[i] = new MeasurePoint(DateTimeAxis.ToDouble(X[i]), Y[i], Y[i]*scale);
        }
        Series.ItemsSource = points;
        Series.TrackerFormatString = "{0}\n{2}\n{Scale}";
var points=新的测量点[Y.Count-1];
对于(int i=0;i
这里的scale是我在打印之前用以划分值的因子,trackperformatstring是{0}序列名,{2}是X值


非常好用

我想在绘图中显示实际值是相当困难的,但也许你可以听mouseevent,获取绘图值,然后从中计算出实际值并显示在文本框或标签中?啊,那么从事件中获取绘图值,然后隐藏跟踪器并显示在标签中?如果我能找到鼠标事件的位置,我将尝试作为方案B。谢谢把这个作为答案,让我知道这是否对你有效。啊,是的,有效,谢谢!现在我有了X/Y值以及它们属于position对象中的所有线系列,我只是想弄清楚如何访问这些属性。我需要向Oxyplot.HitTestResult类添加任何get方法吗?嗯,对不起,我不能测试任何代码。你不能给位置x和y的值分配一个新变量吗?我在调试时可以看到x和y的值,但它不允许我访问代码中的属性。我尝试了类似var x=position.x的东西,如果你是这个意思的话。根据
HitTestResults
属性应该是公共的,这很奇怪。[
ScreenPoint.X
ScreenPoint.Y
]也是如此。你试过访问索引吗?原则上这就是你所需要的。(很抱歉,我刚刚对此做了一个简短的调试测试,明天才能查看代码。是的,我也这么认为,但我似乎无法访问HitTestResult.Item.X。索引可以工作,谢谢,尽管我仍然需要position.Element.Title属性来知道单击属于哪个系列,并且在我们访问时,该系列似乎无法访问。)我想知道怎么编辑源文件,并把这些属性公开?我试着找到方法和地点,但我似乎没有找到正确的方法。