You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Telerik RadChartView缩放后获取可见数据点?

获取Telerik RadChartView缩放后的可见数据点

问题背景

使用Telerik RadChartView控件展示数据,X轴为DateTimeContinuousAxis,Y轴为LinearAxis,通过LassoZoomController实现缩放功能。缩放后需要筛选出图表中仅可见的数据点,但原尝试使用DateTimeContinuousAxis.ActualRange属性时,该范围对应数据源的全量时间区间,而非当前视图的可见范围,无法实现筛选需求。

原尝试代码(无法正确筛选):

var categoricalDataPoints = radChartView.Series.Where(serie => serie.IsVisible).SelectMany(serie => serie.DataPoints)
    .OfType<CategoricalDataPoint>().ToList();

var visibleDateTimes = new List<DateTime>();

if (radChartView.Axes[0] is DateTimeContinuousAxis dateTimeContinuousAxis)
{
    foreach (var categoricalDataPoint in categoricalDataPoints)
    {
        if (categoricalDataPoint.Category is DateTime dateTime)
        {
            if (dateTime >= dateTimeContinuousAxis.ActualRange.Minimum && dateTime <= dateTimeContinuousAxis.ActualRange.Maximum)
            {
                visibleDateTimes.Add(dateTime);
            }
        }
    }
}

解决方案

Telerik RadChartView中,DateTimeContinuousAxis的VisibleRange属性才会实时反映当前视图的可见时间区间,缩放后该属性会自动更新。使用该属性替代ActualRange即可正确筛选可见数据点:

修改后的代码

var visibleDateTimes = new List<DateTime>();

// 获取X轴的可见时间范围
if (radChartView.Axes[0] is DateTimeContinuousAxis dateTimeAxis)
{
    DateTime visibleMin = (DateTime)dateTimeAxis.VisibleRange.Minimum;
    DateTime visibleMax = (DateTime)dateTimeAxis.VisibleRange.Maximum;

    // 筛选可见区域内的数据点
    visibleDateTimes = radChartView.Series
        .Where(serie => serie.IsVisible)
        .SelectMany(serie => serie.DataPoints.OfType<CategoricalDataPoint>())
        .Where(point => 
            point.Category is DateTime dateTime 
            && dateTime >= visibleMin 
            && dateTime <= visibleMax)
        .Select(point => (DateTime)point.Category)
        .ToList();
}

补充说明

如果需要在缩放操作完成后立即获取可见数据点,建议在RadChartView的ZoomChanged事件中执行筛选逻辑,确保VisibleRange已完成更新:

radChartView.ZoomChanged += (sender, e) =>
{
    var visibleDateTimes = new List<DateTime>();
    if (radChartView.Axes[0] is DateTimeContinuousAxis dateTimeAxis)
    {
        DateTime visibleMin = (DateTime)dateTimeAxis.VisibleRange.Minimum;
        DateTime visibleMax = (DateTime)dateTimeAxis.VisibleRange.Maximum;

        visibleDateTimes = radChartView.Series
            .Where(serie => serie.IsVisible)
            .SelectMany(serie => serie.DataPoints.OfType<CategoricalDataPoint>())
            .Where(point => 
                point.Category is DateTime dateTime 
                && dateTime >= visibleMin 
                && dateTime <= visibleMax)
            .Select(point => (DateTime)point.Category)
            .ToList();
        
        // 后续处理可见日期列表
    }
};

内容的提问来源于stack exchange,提问作者Gabriel Medeiros

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 11:00:25