在 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 中制作缩放快捷方式的主要内容,如果未能解决你的问题,请参考以下文章