1

我将 SciChart 与 DateTimeAxis 一起使用。

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

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

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

4

1 回答 1

0

就在这里,

来自文档:在 Zoom 和 Pan 上裁剪 Axis.VisibleRange

高级 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);
        }
    }
}                   
于 2016-05-20T17:19:37.597 回答