OxyPlot получить точку клика

Я пытаюсь построить несколько кругов на точечной диаграмме с помощью:

<Grid>
    <oxy:PlotView x:Name="PlotView" Title="{Binding Title}" >
        <oxy:PlotView.Axes>
            <oxy:LinearAxis Position="Bottom" Minimum="-30" Maximum="30" IsAxisVisible="False" IsZoomEnabled="False" IsPanEnabled="False" />
            <oxy:LinearAxis Position="Left" Minimum="0" Maximum="35" IsAxisVisible="False" IsZoomEnabled="False" IsPanEnabled="False"/>
        </oxy:PlotView.Axes>
        <oxy:PlotView.Series>
            <oxy:ScatterSeries Height="100" Width="100" ItemsSource="{Binding Points}" MarkerType="Circle" />
        </oxy:PlotView.Series>
    </oxy:PlotView>
</Grid>

Я не могу понять, как включить какой-то обработчик кликов, чтобы событие запускалось, когда пользователь нажимает на DataPoint.

Пример:

Пользователь нажимает DataPoint в (X, Y) = (0, 5), я хотел бы запустить событие, чтобы я мог обработать щелчок этой точки.

Возможно ли это с OxyPlot? В настоящее время я изучаю Tracker, чтобы узнать, возможен ли этот маршрут, но у меня заканчиваются идеи.


person Matt    schedule 17.01.2015    source источник
comment
вы пробовали plotView.MouseDown событие?   -  person kennyzx    schedule 17.01.2015
comment
У меня есть. Я могу получить положение мыши по осям x и y, но это не относится к фактическому сюжету.   -  person Matt    schedule 17.01.2015
comment
Я не пробовал, но InverseTransform используется для перевода координат мыши в координаты графика.   -  person kennyzx    schedule 17.01.2015
comment
Кенни: можешь добавить это как ответ, чтобы я мог отметить его как правильный? Похоже, это то, что мне нужно, чтобы двигаться вперед!   -  person Matt    schedule 17.01.2015


Ответы (2)


PlotView определяет события мыши, из которых вы можете получить координаты мыши, а InverseTransform используется для преобразования координат мыши в координаты графика.

Пример:

var model = new PlotModel { Title = "Test Mouse Events" };

var s1 = new LineSeries();
model.Series.Add(s1);

double x;

s1.MouseDown += (s, e) =>
{
    x = (s as LineSeries).InverseTransform(e.Position).X;
};
person kennyzx    schedule 18.01.2015
comment
Я знаю, что это старый вопрос, но можете ли вы привести пример этого решения? Я изо всех сил пытаюсь заставить его работать. - person lucas.mdo; 17.09.2015
comment
Никакое событие не срабатывает для меня, используя это. - person John; 25.06.2020

Я не мог получить принятый ответ на работу. Обработчик MouseDown не будет получать события при щелчке левой кнопкой мыши по графику. Однако он будет получать события для щелчков правой кнопкой мыши и двойных щелчков.

Мой обходной путь — слушать PreviewMouseDown на PlotView.

person Nora Powers    schedule 01.06.2018
comment
MouseDown не получает события, потому что у вас, вероятно, есть собственная серия и вы не переопределяете TrackerHitResult GetNearestPoint(ScreenPoint point, bool interpolate). У меня была та же проблема, но как только я добавил переопределение для этого метода, чтобы просто вернуть InverseTransform, все заработало. - person Dmitry Avtonomov; 06.10.2020