Pre loader

RubberBandXyZoomModifier zoom in Y Axis only

Welcome to the SciChart Forums!

  • Please read our Question Asking Guidelines for how to format a good question
  • Some reputation is required to post answers. Get up-voted to avoid the spam filter!
  • We welcome community answers and upvotes. Every Q&A improves SciChart for everyone

WPF Forums | JavaScript Forums | Android Forums | iOS Forums

1
0

In RubberBandXyZoomModifier it is possible to zoom only in X axis direction by setting IsXAxisOnly property. Is there way to zoom only in Y axis direction? Unfortunately there is no such property like IsYAxisOnly..

  • You must to post comments
0
0

I also had the issue of the rectangle not covering the full x-axis. I found that this was caused by having the Y axis on the left side, and the GetBoundsRelative isn’t accounting for that space.

Here’s my implementation, but with an added XyDirection property to allow switching between X and Y zoom modes (similar to other modifiers):

public static readonly DependencyProperty XyDirectionProperty = DependencyProperty.Register("XyDirection", typeof(XyDirection), typeof(SciChartRubberBandZoomModifier), new PropertyMetadata(XyDirection.XYDirection));

public XyDirection XyDirection
{
    get { return (XyDirection)GetValue(XyDirectionProperty); }
    set { SetValue(XyDirectionProperty, value); }
}

public override void OnModifierMouseDown(ModifierMouseArgs e)
{
    Rect cb = this.ModifierSurface.GetBoundsRelativeTo(this.ModifierSurface);

    ModifierMouseArgs mm = e;
    switch (this.XyDirection)
    {
        case XyDirection.XDirection:
            mm.MousePoint = new Point(e.MousePoint.X, cb.Bottom);
            break;
        case XyDirection.YDirection:
            double axisOffset = 0;
            if (ParentSurface is SciChartSurface && (ParentSurface as SciChartSurface).AxisAreaLeft != null && !double.IsNaN((ParentSurface as SciChartSurface).AxisAreaLeft.ActualWidth))
                axisOffset = (ParentSurface as SciChartSurface).AxisAreaLeft.ActualWidth;

            mm.MousePoint = new Point(cb.Right + axisOffset, e.MousePoint.Y);
            break;
        default:
            break;
    }

    base.OnModifierMouseDown(mm);
}

public override void OnModifierMouseUp(ModifierMouseArgs e)
{
    ModifierMouseArgs mm = e;

    Rect cb = this.ModifierSurface.GetBoundsRelativeTo(this.ModifierSurface);

    switch (this.XyDirection)
    {
        case XyDirection.XDirection:
            mm.MousePoint = new Point(e.MousePoint.X, 0);
            break;
        case XyDirection.YDirection:
            mm.MousePoint = new Point(cb.Left, e.MousePoint.Y);
            break;
        default:
            break;
    }


    base.OnModifierMouseUp(mm);
}

public override void OnModifierMouseMove(ModifierMouseArgs e)
{
    Rect cb = this.ModifierSurface.GetBoundsRelativeTo(this.ModifierSurface);

    ModifierMouseArgs mm = e;
    switch (this.XyDirection)
    {
        case XyDirection.XDirection:
            mm.MousePoint = new Point(e.MousePoint.X, cb.Top);
            break;
        case XyDirection.YDirection:
            mm.MousePoint = new Point(cb.Left, e.MousePoint.Y);
            break;
        default:
            break;
    }

    base.OnModifierMouseMove(mm);
}
  • You must to post comments
Showing 1 result
Your Answer

Please first to submit.

Try SciChart Today

Start a trial and discover why we are the choice
of demanding developers worldwide

Start TrialCase Studies