2016-05-18 11 views
1

SciChartにDateTimeAxisを使用しています。DateTime軸のズームを制限する

私のアイテムは、2016年5月15日8:30 AMから2016年5月25日8:30 AMまでに始まります。 VisibleRangeの初期値もこの範囲に設定されています。同じ範囲でもう一度VisibleRangeLimitを追加しました。

しかし、私がコーナーにスクロールすると、日付の値が範囲外になり、その結果、一部のズームレベルで、許容範囲外の日付が表示される、ということが2016年5月15日8時25分AM。これは、空白になるのは5分間です。

可視範囲を実際に制限する方法はありますか?はい、あり

答えて

0

Documentation: Clipping the Axis.VisibleRange on Zoom and Panから

高度VisibleRangeクリッピングおよび操作

Axis.VisibleRangeLimitは、エクステントにズームするとき軸クリップVisibleRangeを確保するための便利なAPIです。ただし、ユーザーがその範囲外にスクロールすることはありません。

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); 
    } 
}; 

クリッピング:ちょうど次のコードを使用し、VisibleRangeをクリップして、特定の最大値や最小値を強制的に

クリッピングコード

でAxis.VisibleRange

:それを実現するには、小さな変更が必要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); 
     } 
    } 
}     
+0

回答ありがとうございます。私はすでにこのソリューションを試しましたが、それには1つの問題があります。左にスクロールすると、最小値が最小値に制限されているときにズームレベルを変更し始めます。他の解決策があるかもしれないと私は考えていました。だから、上記の問題を修正するために、最大値はe.NewVisibleRange.Maxに(axis.visiblerangelimit.min - e.NewVisibleRange.Min)を加えて修正する必要があります。 このアイテムは解決済みとマークしますが、このパッチで回答を更新してください。ありがとう –

+0

こんにちはSamvel、私はそれが働いてうれしいですが、私は必要な変更を確信していません。私の答えを編集しますか? (権限がありますか?) –

+0

他のユーザーのために更新することを提案しました。これも問題を述べている可能性があります。 –