Short :OxyPlot鼠标事件处理(例如mySeries.MouseDown)不被 grab 的一瞬间后,第二次我打电话myModel.InvalidatePlot(真/假)来更新我的模型 .
Detailed :我'm using the OxyPlot library in a sort of unconventional way. I am imitating the playing of a video in the background by rapidly updating an image annotation that takes up the entire graph. This allows me to use mouse events to plot on the image. My issue is that the video/image annotation playing and mouse events work separate, but when mouse events occur during the '帧更新'其中一些错过了 . 我的信念是,当绘图无效myModel.InvalidatePlot(true / false)时,在模型更新之前不会拾取鼠标事件 .
2 回答
我发现InvalidatePlot导致了PlotView从未捕获到鼠标按钮事件(如OnMouseDown(MouseButtonEventArgs e))的问题 . 为了解决这个问题,我使用了另一个WPF对象来捕获鼠标事件并强制调用我的PlotView的鼠标处理方法:
1)我在另一个ZIndex级别添加了一个WPF网格 . 并附加到鼠标事件(MouseDown,MouseWheel等)的函数:
2)网格处理的每个事件都会调用我在OxyPlot源代码中创建的公共方法:
3)在源代码文件OxyPlot.Wpf \ PlotBase.Events.cs我创建功能(如ForceMouseDown(MouseButtonEventArgs E)),其明确要求保护的鼠标事件(onmousedown事件(MouseButtonEventArgs e))的
通过这种方式修复问题,我仍然可以按照OxyPlot建议的方式将鼠标事件处理程序添加到我的Plotview中,因为它们的OnMouse ####事件仍然被调用,它们现在只是由覆盖网格显式调用 .
基于CodyF的修复,我发现了一个更简单的修复方法 . 在OxyPlot.Wpf.PlotBase中的OnApplyTemplate()末尾添加以下行:
但是,这种变化目前会制动工具提示 . 另请参阅OxyPlot的github页面中的pull request .