鼠标滚轮时的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轴锁定中心的主要内容,如果未能解决你的问题,请参考以下文章

用js实现页面图片,以鼠标位置为中心,滚轮缩放图片

js 检测鼠标滚轮上下滚动

使用 ctrl + 鼠标滚轮进行缩放

使用带有变换原点中心的滚轮在鼠标点上放大/缩小图像。在计算中需要帮助 [已解决]

UE4快捷键

如何在鼠标滚轮滚动上为剪贴蒙版设置动画