Как решить, какой сегмент оси Y был нажат в LightningChart
Я начал использовать 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 ответ
Вы правы, что ключевым моментом здесь является получение позиции мыши с помощью события 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;
Примечание Высота означает высоту сегмента по сравнению с другими сегментами. Надеюсь, это полезно.