在 SciChart WPF 中制作缩放快捷方式

Posted

技术标签:

【中文标题】在 SciChart WPF 中制作缩放快捷方式【英文标题】:Making zooms shortcuts in SciChart WPF 【发布时间】:2016-07-06 13:57:23 【问题描述】:

1) 我想在 5 分钟前创建缩放快捷方式。 10分钟 距离最后一秒还有 24 小时。

我编写了这段代码,但它不能正常工作。

我应该解决什么问题?

    ZoomOptions = new List<ZoomOption>
    
        new ZoomOption("5M", TimeSpan.FromMinutes(5)),
        new ZoomOption("30M", TimeSpan.FromMinutes(30)),
        new ZoomOption("1H", TimeSpan.FromHours(1)),
        new ZoomOption("1D", TimeSpan.FromHours(24)),
    ;

    SelectedZoomOption = ZoomOptions.Last();

private void UpdateZoom()

    if (_viewModel == null ||
        _viewModel.SelectedZoomOption == null ||
        _viewModel.LastTick == null) return;

    var timeSpan = _viewModel.SelectedZoomOption.Time;
    var latestXValue = _viewModel.LastTick.Time;
    var startDate = latestXValue - timeSpan;

    var axis = (CategoryDateTimeAxis)Chart.XAxis;
    if (axis == null || axis.VisibleRange == null) return;
    var calc = (ICategoryCoordinateCalculator)axis.GetCurrentCoordinateCalculator();
    if (calc == null) return;
    var startIndex = calc.TransformDataToIndex(startDate);

    var max = ((IndexRange)axis.VisibleRange).Max;
    var desiredMax = calc.TransformDataToIndex(latestXValue) + 5;
    if (timeSpan < TimeSpan.FromMinutes(10))
    
        max = desiredMax;
    
    else if (max == desiredMax)
    
        max += 100;
    
    axis.VisibleRange = new IndexRange(startIndex, max);

2) 为什么当我没有图表历史记录但只有新的刻度时,我无法从头看到图表,而是应该用鼠标回到之前的一点点?

3) 更改菜单中的图形以初始化和重置时我应该怎么做?

【问题讨论】:

【参考方案1】:

在SciChart 中,当您使用CategoryDateTimeAxis 时,一栏(一个数据点)= x 分钟(假设您的数据每栏的间距相等)。

例如,如果图表上有 15 分钟(900 秒)的柱,那么 10 个柱 = 150 分钟(9000 秒)。因此,您需要做的就是设置 XAxis.VisibleRange 如下:

public void SetRangeToTimeFrame(TimeSpan timeFrame)

    // Assuming you have a reference to the data series of type OhlcDataSeries
    int indexMax = dataSeries.XValues.Count - 1;

    // Assuming you know timeframe (one bar = X seconds)
    // If you don;t know this, SciChart tries to calculate it in the 
    // CategoryDateTimeAxis.BarTimeFrame property
    const int timeframe = 900; // for example 900 seconds per bar

    // Calculate the min index to display. Do not go below zero
    int indexMin = Math.Max(indexMax - (timeFrame.TotalSeconds / timeFrame), 0);

    // Set XAxis.VisibleRange equal to the new range
    // OR, Set via binding if you have a property XVisibleRange in ViewModel
    XAxis.VisibleRange = new IndexRange(indexMin, indexMax);

原来如此!

如果您有可变长度的条形图(例如,一个条形图是 10 分钟,一个是 20 秒),那么您的计算几乎是不可能的……但它仍然是可能的。如果是这种情况,请告诉我,我会改进答案。

(2) 和 (3) 是完全不同的问题,需要进一步澄清才能回答。

免责声明:我是 SciChart WPF 项目的技术主管

【讨论】:

以上是关于在 SciChart WPF 中制作缩放快捷方式的主要内容,如果未能解决你的问题,请参考以下文章

如何制作“全局”wpf 应用程序热键

在 WPF 中获取 Windows 10 文本缩放值

快闪h5的制作方法 ,人人都可以快速制作快闪

WPFの三种方式实现快捷键

为啥 WPF 中的鼠标位置不正确,而缩放桌面上的 Winforms 则不正确?

VS打包程序制作的快捷方式指向错误的位置(指向安装包文件) 导致每次启动都要windows正在配置