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..
- anth asked 11 years ago
- You must login to post comments
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);
}
- Garrett McCardle answered 8 years ago
- last edited 8 years ago
- You must login to post comments
Please login first to submit.