鼠标滚轮时的oxyplot轴锁定中心
Posted
技术标签:
【中文标题】鼠标滚轮时的oxyplot轴锁定中心【英文标题】:oxyplot axis locking center when mouse wheel 【发布时间】:2017-05-24 17:42:24 【问题描述】:我是 wpf 和 oxyPlot 的新手。 现在,我想创建一个像示波器一样的动态折线图,但是我不知道如何在鼠标滚轮缩放时将轴锁定在某个值上。
示例:
红点是鼠标位置。在正常情况下,缩放 A -> B,缩放 C -> D。现在,我想缩放 C -> E,就像鼠标位置在 0 中心。
【问题讨论】:
你知道如果你用指针在一个轴上缩放,只有那个轴会缩放吗? @Kirenenko 我知道,但不是我的意思。如果我将指针指向一个轴,也许我希望它放大中心值。 那你要干什么,挡住纵轴?也许一张图片/ gif 展示你想要实现的目标会有所帮助。 dropbox.com/s/bk3ga7r8xf3xtk8/sample.png?dl=0 红点是鼠标位置。在正常情况下,缩放 A -> B,缩放 C -> D。现在,我想缩放 C -> E,喜欢鼠标位置在 0 中心。 @Kirenenko Thx. 【参考方案1】:我找到了一种可以阻止轴缩放中心的解决方案。你必须创建一个自定义的LinearAxis
来实现这一点:
public class FixedCenterLinearAxis : LinearAxis
double center = 0;
public FixedCenterLinearAxis() : base()
public FixedCenterLinearAxis(double _center) : base()
center = _center;
public override void ZoomAt(double factor, double x)
base.ZoomAt(factor, center);
你必须这样使用它:
var bottomAxis = new FixedCenterLinearAxis(0.5) //specify the center value here
Position = AxisPosition.Bottom,
;
plotModel.Axes.Add(bottomAxis);
如果你没有在构造函数上指定值,中心值为0。
【讨论】:
谢谢。是工作。但我有两个问题。 1. 与直接使用ZoomAt()
和ZoomAtCenter()
有什么区别? 2.如果中心值不为0,当我缩放时,中心值几乎消失了。
起初我尝试在覆盖函数中使用ZoomAtCenter
。但是它调用ZoomAt
,所以它会导致一个无限循环。也可以随意接受正确的答案。以上是关于鼠标滚轮时的oxyplot轴锁定中心的主要内容,如果未能解决你的问题,请参考以下文章