One of the recent questions on Stackoverflow was about having a Oxyplot tracker that
- Is evoked only over the Points and NOT line/outside.
- Stays Open until another point is selected.
The first part could be easily achieved by using a Custom PlotController that Binds the Mouse Down event only the Left
Mouse Button and only on Tracks
CustomPlotController = new PlotController();
CustomPlotController.UnbindAll();
CustomPlotController.BindMouseDown(OxyMouseButton.Left, PlotCommands.PointsOnlyTrack);
You could now bind the CustomPlotController with your Xaml as
<oxy:PlotView Model="{Binding MyModel}" Controller="{Binding CustomPlotController}">
The second part needs you to write a Custom TrackerManipulator
. The core idea would revolve around override the Completed
method in TrackerManipulator
, so that the Oxyplot is unable to hide the tracker.
If we were to ensure with the same TrackerManipulator
that the trackers is enabled only Points
, then the current tracker would be left open until the new tracker is opened at new location by a succeeding click on another point in the graph.
Let us go ahead and write our Custom TrackerManipulator.
public class StaysOpenTrackerManipulator : TrackerManipulator
{
public StaysOpenTrackerManipulator(IPlotView plotView) : base(plotView)
{
Snap = true;
PointsOnly = true;
}
public override void Completed(OxyMouseEventArgs e)
{
// Do nothing
}
}
That’s all you need to achieve the goal. You can find the source code of this post in my Github Repo
