我正在使用SciChart和DateTimeAxis。
我的商品从2016年5月15日上午8:30开始,到2016年5月25日上午8:30结束。 VisibleRange的初始值也设置在此范围内。我还用相同的范围再次添加了VisibleRangeLimit。
但问题是,当我滚动到角落时,日期值超出了我的范围,因此,在某些缩放级别上,我看到的日期超出了我允许的范围,如2016年5月15日上午8:25 。这导致空白持续5分钟。
有没有办法真正限制可见范围?
答案 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); } } }