限制日期时间轴上的缩放

时间:2016-05-18 17:58:56

标签: wpf datetime wpf-controls scichart

我正在使用SciChart和DateTimeAxis。

我的商品从2016年5月15日上午8:30开始,到2016年5月25日上午8:30结束。 VisibleRange的初始值也设置在此范围内。我还用相同的范围再次添加了VisibleRangeLimit。

但问题是,当我滚动到角落时,日期值超出了我的范围,因此,在某些缩放级别上,我看到的日期超出了我允许的范围,如2016年5月15日上午8:25 。这导致空白持续5分钟。

有没有办法真正限制可见范围?

1 个答案:

答案 0 :(得分:0)

是的,

来自Documentation: Clipping the Axis.VisibleRange on Zoom and Pan

  

高级VisibleRange剪辑和操作

     

Axis.VisibleRangeLimit是一个有用的API,可确保轴在缩放到范围时剪切VisibleRange。但是,它不会阻止用户滚动到该范围之外。为此,您需要进行一些小修改:

     

在代码

中剪切Axis.VisibleRange      

要剪切VisibleRange并强制使用某个最大值或最小值,只需使用以下代码:

     
axis.VisibleRangeChanged += (s, e) =>
{
   // e is VisibleRangeChangedEventArgs
   // Assuming axis is NumericAxis

   if (e.NewVisibleRange != null && e.NewVisibleRange.Min < 0)
   {
      // Force minimum visiblerange to zero always
      ((NumericAxis)sender).VisibleRange = new DoubleRange(0, e.NewVisibleRange.Max);
   }
};
     

使用MVVM剪切Axis.VisibleRange

     

通过创建自定义行为,可以在MVVM中实现相同的目标。

     
public class AxisClippingBehavior : Behavior<AxisBase>
  {
    protected override void OnAttached()
    {
        base.OnAttached();

        AssociatedObject.VisibleRangeChanged +=OnVisibleRangeChanged;
    }

    protected override void OnDetaching()
    {
        base.OnDetaching();

        AssociatedObject.VisibleRangeChanged -= OnVisibleRangeChanged;
    }

    private void OnVisibleRangeChanged(object sender, VisibleRangeChangedEventArgs visibleRangeChangedEventArgs)
    {
        var visibleRangeLimit = AssociatedObject.VisibleRangeLimit;
        if (visibleRangeLimit != null)
        {
            var limitMode = AssociatedObject.VisibleRangeLimitMode;

            var range = (IRange)AssociatedObject.VisibleRange.Clone();
            range.ClipTo(visibleRangeLimit, limitMode);

            AssociatedObject.SetCurrentValue(AxisBase.VisibleRangeProperty, range);
        }
    }
}