1

DateTimeAxis で SciChart を使用しています。

私のアイテムは 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は、範囲にズームするときに軸がVisibleRangeを確実にクリップするのに役立つ API です。ただし、ユーザーがその範囲外にスクロールするのを止めることはできません。これを実現するには、小さな変更が必要です。

コードでの 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 に答える