简体   繁体   中英

OxyPlot get clicked point

I am trying to plot some circles on a scatter plot via:

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

I cannot figure out how to enable some sort of click handler to have an event fired when a user clicks on a DataPoint .

Examaple:

User clicks DataPoint at (X, Y) = (0, 5), I would like to fire an event so I can handle the click of that point.

Is this possible with OxyPlot? I am currently investigating the Tracker to see if its possible that route, but starting to run out of ideas.

PlotView has defined mouse events, from which you can get the mouse coordinates, and InverseTransform is used to translate mouse coordinates to plot coordinates.

Example:

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

I couldn't get the accepted answer to work. The MouseDown handler wouldn't receive events when the plot was left-clicked. It would, however, receive events for right-clicks and double-clicks.

My workaround is to listen for PreviewMouseDown on the PlotView .

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM