Как решить, какой сегмент оси Y был нажат в LightningChart - PullRequest
0 голосов
/ 02 июля 2019

Я начал использовать LightningChart в своем приложении для мониторинга в реальном времени. В моем приложении есть много осей Y, которые используют сегментированный макет (одна ось Y на сегмент):

mainChart.ViewXY.AxisLayout.YAxesLayout = YAxesLayout.Segmented;

Моя цель состоит в том, чтобы при щелчке мышью по сегменту он становился больше по сравнению с другими сегментами (вроде эффекта масштабирования), а другие сегменты уменьшались. При повторном нажатии он возвращается в нормальное состояние.

Я знаю, что могу изменить размер сегментов с помощью:

mainChart.ViewXY.AxisLayout.Segments[segmentNumber].Height = someValue;

Это заботится о эффекте масштабирования. Теперь проблема в том, как я могу решить, какой сегмент был фактически нажат? Я понял, что вы получаете положение мыши с помощью MouseClick -event (e.MousePos), но, похоже, это дает только координаты экрана, поэтому я не уверен, что это поможет.

Я использую LightningChart версии 8.4.2

1 Ответ

1 голос
/ 02 июля 2019

Вы правы, что получение позиции мыши с помощью события MouseClick является ключевым здесь. Координаты экрана, которые вы получаете через e.GetPosition (не e.MousePos), могут быть преобразованы в значения осей диаграммы с помощью метода CoordToValue (). Затем вы просто сравниваете координату y с каждым минимальным / максимальным значением оси y, чтобы узнать, какой сегмент был нажат. Вот пример:

_chart.MouseClick += _chart_MouseClick;

private void _chart_MouseClick(object sender, MouseButtonEventArgs e)
{            
    var mousePos = e.GetPosition(_chart).Y;
    double axisPos = 0;
    bool isWithinYRange = false;
    foreach (AxisY ay in _chart.ViewXY.YAxes)
    {
        ay.CoordToValue((float)mousePos, out axisPos, true);
        if (axisPos >= ay.Minimum && axisPos <= ay.Maximum)
        {
            // Segment clicked, get the index via ay.SegmentIndex;
            isWithinYRange = true;
        }
    }
    if (!isWithinYRange)
    {
        // Not in any segment
    }
}

Найдя индекс сегмента, вы можете изменить его высоту, как описано выше:

_chart.ViewXY.AxisLayout.Segments[0].Height = 1.5;

Примечание Высота означает высоту сегмента по сравнению с другими сегментами. Надеюсь, что это полезно.

...