syncfusion-blazor-range-selectors

Compare original and translation side by side

🇺🇸

Original

English
🇨🇳

Translation

Chinese

Implementing Range Selectors

实现范围选择器

A comprehensive skill for implementing Syncfusion Blazor Range Selector (RangeNavigator) components for data range selection and chart navigation. The Range Selector enables users to select a specific range from a large data collection using draggable thumbs, providing an intuitive way to filter and navigate through time-series or numeric data.
这是一份关于实现Syncfusion Blazor范围选择器(RangeNavigator)组件以进行数据范围选择和图表导航的全面指南。范围选择器允许用户通过可拖动的滑块从大型数据集合中选择特定范围,为时间序列或数值数据的过滤和导航提供直观方式。

When to Use This Skill

何时使用此技能

Use this skill immediately when you need to:
  • Enable range selection in charts with draggable thumbs
  • Filter large time-series datasets by date range
  • Navigate through financial data or stock prices
  • Create chart zoom/pan controls with visual feedback
  • Implement dashboard filtering based on data ranges
  • Add period selector buttons (1M, 3M, 6M, YTD, 1Y, All) for quick navigation
  • Display data trends with area, line, or stepline series
  • Build interactive data exploration interfaces
  • Filter data for drill-down analysis
  • Create responsive range selection controls for Blazor Server, WebAssembly, or Web App
  • Enable synchronized filtering across multiple charts
  • Implement lightweight chart navigation for performance-critical scenarios
  • Provide visual context for selected data ranges
当您需要以下功能时,请立即使用此技能:
  • 在图表中启用带可拖动滑块的范围选择
  • 按日期范围过滤大型时间序列数据集
  • 导航财务数据或股票价格
  • 创建带有视觉反馈的图表缩放/平移控件
  • 实现基于数据范围的仪表板过滤
  • 添加周期选择器按钮(1M、3M、6M、YTD、1Y、全部)以快速导航
  • 显示区域图、折线图或阶梯线图的数据趋势
  • 构建交互式数据探索界面
  • 为钻取分析过滤数据
  • 为Blazor Server、WebAssembly或Web App创建响应式范围选择控件
  • 实现多图表间的同步过滤
  • 为性能关键场景实现轻量级图表导航
  • 为选定的数据范围提供视觉上下文

Component Overview

组件概述

The Syncfusion Blazor Range Selector (
SfRangeNavigator
) is a specialized control designed for data range selection and navigation. It combines:
  • Draggable Thumbs: Left and right handles for selecting range boundaries
  • Visual Series: Line, Area, or StepLine visualization of data trends
  • Period Selector: Quick preset buttons via
    RangeNavigatorPeriodSelectorSettings
    ,
    RangeNavigatorPeriods
    , and
    RangeNavigatorPeriod
  • Value Types: Support for DateTime, Numeric, and Logarithmic data
  • Interactive Selection: Click labels or drag thumbs to update range
  • Data Binding: Local and remote data source integration
  • Customization: Extensive styling, theming, and formatting options using
    RangeNavigatorBorder
    ,
    RangeNavigatorMargin
    ,
    RangeNavigatorStyleSettings
    ,
    RangeNavigatorThumbSettings
    , and tooltip settings
Key Capabilities:
  • Range Selection Methods: Drag thumbs, tap labels, or set programmatically
  • Series Types: Line (default), Area, StepLine
  • Value Binding: One-way and two-way binding support
  • Integration: Works with period selectors and other charts
  • Export: PNG, JPEG, SVG, PDF export functionality
  • Accessibility: WCAG compliant with keyboard navigation
Syncfusion Blazor范围选择器
SfRangeNavigator
)是专为数据范围选择和导航设计的专用控件。它结合了以下特性:
  • 可拖动滑块:用于选择范围边界的左右手柄
  • 视觉系列:折线图、区域图或阶梯线图的数据趋势可视化
  • 周期选择器:通过
    RangeNavigatorPeriodSelectorSettings
    RangeNavigatorPeriods
    RangeNavigatorPeriod
    实现的快速预设按钮
  • 值类型:支持DateTime、数值和对数数据
  • 交互式选择:点击标签或拖动滑块更新范围
  • 数据绑定:本地和远程数据源集成
  • 自定义:使用
    RangeNavigatorBorder
    RangeNavigatorMargin
    RangeNavigatorStyleSettings
    RangeNavigatorThumbSettings
    和工具提示设置进行广泛的样式、主题和格式定制
核心功能:
  • 范围选择方法:拖动滑块、点击标签或编程设置
  • 系列类型:折线图(默认)、区域图、阶梯线图
  • 值绑定:单向和双向绑定支持
  • 集成:可与周期选择器和其他图表配合使用
  • 导出:PNG、JPEG、SVG、PDF导出功能
  • 可访问性:符合WCAG标准,支持键盘导航

Documentation and Navigation Guide

文档和导航指南

Getting Started

入门指南

📄 Read: references/getting-started.md
Start here for installation, setup, and your first range selector. Covers:
  • Installing Syncfusion.Blazor.RangeNavigator NuGet package
  • Blazor Server, WebAssembly, and Web App setup
  • Service registration and theme configuration
  • Basic SfRangeNavigator implementation with sample data
  • Project structure and script references
  • Troubleshooting common setup issues
📄 阅读: references/getting-started.md
从这里开始学习安装、设置和创建第一个范围选择器。涵盖内容:
  • 安装Syncfusion.Blazor.RangeNavigator NuGet包
  • Blazor Server、WebAssembly和Web App的设置
  • 服务注册和主题配置
  • 使用示例数据实现基础SfRangeNavigator
  • 项目结构和脚本引用
  • 常见设置问题的故障排除

Core Configuration

核心配置

Range Selection and Values

范围选择和值

📄 Read: references/range-configuration.md
Configure range selection behavior and value binding:
  • Value property for start and end values
  • One-way and two-way binding patterns
  • Value types (DateTime, Numeric, Logarithmic)
  • Thumb dragging for range selection
  • Label tapping for quick selection
  • Programmatic range updates and validation
📄 阅读: references/range-configuration.md
配置范围选择行为和值绑定:
  • 用于起始和结束值的Value属性
  • 单向和双向绑定模式
  • 值类型(DateTime、数值、对数)
  • 拖动滑块进行范围选择
  • 点击标签快速选择
  • 编程式范围更新和验证

Series Types

系列类型

📄 Read: references/series-types.md
Choose and customize series visualization:
  • Line series for trend lines
  • Area series for filled regions
  • StepLine series for discrete data
  • Series customization (colors, width, fill)
  • Multiple series support
📄 阅读: references/series-types.md
选择和自定义系列可视化:
  • 用于趋势线的折线图系列
  • 用于填充区域的区域图系列
  • 用于离散数据的阶梯线图系列
  • 系列自定义(颜色、宽度、填充)
  • 多系列支持

Data and Integration

数据和集成

Data Binding

数据绑定

📄 Read: references/data-binding.md
Configure data sources for the range selector:
  • Local data sources (List, Array, ExpandoObject)
  • Remote data binding with SfDataManager
  • DateTime data handling and formatting
  • Numeric and logarithmic scale data
  • Data refresh and dynamic updates
📄 阅读: references/data-binding.md
为范围选择器配置数据源:
  • 本地数据源(List、Array、ExpandoObject)
  • 使用SfDataManager进行远程数据绑定
  • DateTime数据处理和格式化
  • 数值和对数刻度数据
  • 数据刷新和动态更新

Period Selector Integration

周期选择器集成

📄 Read: references/period-selector-integration.md
Add period selector buttons for quick navigation:
  • Predefined period buttons (1M, 3M, 6M, YTD, 1Y, All)
  • Custom period configuration
  • Integration with range changes
  • Event handling for period selection
  • Styling and positioning
📄 阅读: references/period-selector-integration.md
添加周期选择器按钮以快速导航:
  • 预定义周期按钮(1M、3M、6M、YTD、1Y、全部)
  • 自定义周期配置
  • 与范围变化集成
  • 周期选择的事件处理
  • 样式和定位

Customization and Styling

自定义和样式

Axis Customization

轴自定义

📄 Read: references/axis-customization.md
Customize axis, grid, and labels:
  • Grid line configuration (major and minor)
  • Tick customization (size, color, position)
  • Label formatting and rotation
  • Interval types (Years, Months, Days, Hours, Minutes)
  • Logarithmic axis support
  • RTL (Right-to-Left) support
📄 阅读: references/axis-customization.md
自定义轴、网格和标签:
  • 网格线配置(主网格线和次网格线)
  • 刻度自定义(大小、颜色、位置)
  • 标签格式化和旋转
  • 间隔类型(年、月、日、时、分)
  • 对数轴支持
  • RTL(从右到左)支持

Visual Customization

视觉自定义

📄 Read: references/visual-customization.md
Control appearance, themes, and layout:
  • Chart dimensions (Width, Height, Margin)
  • Theme selection (Material, Bootstrap, Fluent, Tailwind, Fabric, Highcontrast)
  • Tooltip configuration and templates
  • Lightweight rendering mode for performance
  • Custom styling and color schemes
  • Responsive design patterns
📄 阅读: references/visual-customization.md
控制外观、主题和布局:
  • 图表尺寸(宽度、高度、边距)
  • 主题选择(Material、Bootstrap、Fluent、Tailwind、Fabric、Highcontrast)
  • 工具提示配置和模板
  • 用于性能优化的轻量级渲染模式
  • 自定义样式和配色方案
  • 响应式设计模式

Advanced Features

高级功能

Export, Events, and Accessibility

导出、事件和可访问性

📄 Read: references/export-events-accessibility.md
Handle exports, events, and ensure accessibility:
  • Export: PNG, JPEG, SVG, PDF export functionality
  • Events: Changed, Loaded, TooltipRender event handling
  • Accessibility: WCAG compliance, keyboard navigation, screen readers, high contrast themes
  • ARIA attributes and testing checklist
📄 阅读: references/export-events-accessibility.md
处理导出、事件并确保可访问性:
  • 导出:PNG、JPEG、SVG、PDF导出功能
  • 事件:Changed、Loaded、TooltipRender事件处理
  • 可访问性:WCAG合规、键盘导航、屏幕阅读器、高对比度主题
  • ARIA属性和测试清单

Quick Start Example

快速入门示例

Here's a minimal range selector for time-series data filtering with event handling:
razor
@using Syncfusion.Blazor.Charts

@{
    DateTime[] range = SelectedRange as DateTime[] ?? new DateTime[] { DateTime.Now, DateTime.Now };
}
<h3>Stock Price Range Selector</h3>
<p>Selected Range: @range[0].ToShortDateString() to @range[1].ToShortDateString()</p>

<SfRangeNavigator @bind-Value="@SelectedRange" 
                  ValueType="RangeValueType.DateTime"
                  LabelFormat="MMM-yy"
                  IntervalType="RangeIntervalType.Months">
        <RangeNavigatorEvents Changed="OnRangeChanged"></RangeNavigatorEvents>
    <RangeNavigatorRangeTooltipSettings Enable="true"></RangeNavigatorRangeTooltipSettings>
    <RangeNavigatorSeriesCollection>
        <RangeNavigatorSeries DataSource="@StockData" 
                              XName="Date" 
                              YName="Close" 
                              Type="RangeNavigatorType.Area"
                              Fill="#3F51B5">
        </RangeNavigatorSeries>
    </RangeNavigatorSeriesCollection>
</SfRangeNavigator>

@code {
    public class StockInfo
    {
        public DateTime Date { get; set; }
        public double Close { get; set; }
    }
    
    public object SelectedRange = new DateTime[] 
    { 
        new DateTime(2020, 01, 01), 
        new DateTime(2021, 01, 01) 
    };
    
    public List<StockInfo> StockData = new List<StockInfo>
    {
        new StockInfo { Date = new DateTime(2018, 01, 01), Close = 35 },
        new StockInfo { Date = new DateTime(2019, 01, 01), Close = 42 },
        new StockInfo { Date = new DateTime(2020, 01, 01), Close = 48 },
        new StockInfo { Date = new DateTime(2021, 01, 01), Close = 56 },
        new StockInfo { Date = new DateTime(2022, 01, 01), Close = 62 }
    };
    
    private void OnRangeChanged(ChangedEventArgs args)
    {
        // Handle range change event
        Console.WriteLine($"Range changed: {args.Start} to {args.End}");
    }
}
What this creates:
  • Area chart showing stock price trend with blue fill (#3F51B5)
  • Draggable thumbs for range selection
  • Initially selected range: Jan 2020 to Jan 2021
  • Month labels with "MMM-yy" format
  • Tooltip showing values on hover
  • Event handler responding to range changes
  • Two-way binding with @bind-Value directive
以下是一个用于时间序列数据过滤并带有事件处理的最小化范围选择器:
razor
@using Syncfusion.Blazor.Charts

@{
    DateTime[] range = SelectedRange as DateTime[] ?? new DateTime[] { DateTime.Now, DateTime.Now };
}
<h3>股票价格范围选择器</h3>
<p>选定范围:@range[0].ToShortDateString()@range[1].ToShortDateString()</p>

<SfRangeNavigator @bind-Value="@SelectedRange" 
                  ValueType="RangeValueType.DateTime"
                  LabelFormat="MMM-yy"
                  IntervalType="RangeIntervalType.Months">
        <RangeNavigatorEvents Changed="OnRangeChanged"></RangeNavigatorEvents>
    <RangeNavigatorRangeTooltipSettings Enable="true"></RangeNavigatorRangeTooltipSettings>
    <RangeNavigatorSeriesCollection>
        <RangeNavigatorSeries DataSource="@StockData" 
                              XName="Date" 
                              YName="Close" 
                              Type="RangeNavigatorType.Area"
                              Fill="#3F51B5">
        </RangeNavigatorSeries>
    </RangeNavigatorSeriesCollection>
</SfRangeNavigator>

@code {
    public class StockInfo
    {
        public DateTime Date { get; set; }
        public double Close { get; set; }
    }
    
    public object SelectedRange = new DateTime[] 
    { 
        new DateTime(2020, 01, 01), 
        new DateTime(2021, 01, 01) 
    };
    
    public List<StockInfo> StockData = new List<StockInfo>
    {
        new StockInfo { Date = new DateTime(2018, 01, 01), Close = 35 },
        new StockInfo { Date = new DateTime(2019, 01, 01), Close = 42 },
        new StockInfo { Date = new DateTime(2020, 01, 01), Close = 48 },
        new StockInfo { Date = new DateTime(2021, 01, 01), Close = 56 },
        new StockInfo { Date = new DateTime(2022, 01, 01), Close = 62 }
    };
    
    private void OnRangeChanged(ChangedEventArgs args)
    {
        // 处理范围变化事件
        Console.WriteLine($"范围已更改:{args.Start}{args.End}");
    }
}
此示例实现的功能:
  • 显示股票价格趋势的区域图,填充色为蓝色(#3F51B5)
  • 用于范围选择的可拖动滑块
  • 初始选定范围:2020年1月至2021年1月
  • 采用"MMM-yy"格式的月份标签
  • 悬停时显示值的工具提示
  • 响应范围变化的事件处理程序
  • 使用@bind-Value指令的双向绑定

Common Use Cases

常见用例

1. Stock Price Filtering with Period Selector

1. 带周期选择器的股票价格过滤

Filter stock data with quick period buttons:
razor
@using Syncfusion.Blazor.Charts

<SfRangeNavigator @bind-Value="@SelectedRange" 
                  ValueType="RangeValueType.DateTime"
                  IntervalType="RangeIntervalType.Months"
                  LabelFormat="MMM yy">
    <RangeNavigatorRangeTooltipSettings Enable="true" DisplayMode="TooltipDisplayMode.Always">
    </RangeNavigatorRangeTooltipSettings>
    <RangeNavigatorPeriodSelectorSettings>
        <RangeNavigatorPeriods>
            <RangeNavigatorPeriod Text="1M" Interval="1" IntervalType="RangeIntervalType.Months"></RangeNavigatorPeriod>
            <RangeNavigatorPeriod Text="3M" Interval="3" IntervalType="RangeIntervalType.Months"></RangeNavigatorPeriod>
            <RangeNavigatorPeriod Text="6M" Interval="6" IntervalType="RangeIntervalType.Months"></RangeNavigatorPeriod>
            <RangeNavigatorPeriod Text="YTD"></RangeNavigatorPeriod>
            <RangeNavigatorPeriod Text="1Y" Interval="1" IntervalType="RangeIntervalType.Years"></RangeNavigatorPeriod>
            <RangeNavigatorPeriod Text="All"></RangeNavigatorPeriod>
        </RangeNavigatorPeriods>
    </RangeNavigatorPeriodSelectorSettings>
    <RangeNavigatorSeriesCollection>
        <RangeNavigatorSeries DataSource="@StockData" XName="Date" YName="Close" Type="RangeNavigatorType.Area">
        </RangeNavigatorSeries>
    </RangeNavigatorSeriesCollection>
</SfRangeNavigator>

@{
    DateTime[] range = SelectedRange as DateTime[] ?? new DateTime[] { DateTime.Now, DateTime.Now };
}
<p>Selected Range: @range[0].ToShortDateString() to @range[1].ToShortDateString()</p>

@code {
    public object SelectedRange = new DateTime[] 
    { 
        new DateTime(2022, 01, 01), 
        new DateTime(2023, 01, 01) 
    };
    
    public List<StockInfo> StockData = GetStockData();
    
    private static List<StockInfo> GetStockData()
    {
        // Sample data generation
        var data = new List<StockInfo>();
        var startDate = new DateTime(2020, 01, 01);
        var random = new Random();
        
        for (int i = 0; i < 100; i++)
        {
            data.Add(new StockInfo 
            { 
                Date = startDate.AddDays(i * 10), 
                Close = 100 + random.Next(-20, 20) 
            });
        }
        
        return data;
    }

    public class StockInfo
    {
        public DateTime Date { get; set; }
        public double Close { get; set; }
    }
}
使用快速周期按钮过滤股票数据:
razor
@using Syncfusion.Blazor.Charts

<SfRangeNavigator @bind-Value="@SelectedRange" 
                  ValueType="RangeValueType.DateTime"
                  IntervalType="RangeIntervalType.Months"
                  LabelFormat="MMM yy">
    <RangeNavigatorRangeTooltipSettings Enable="true" DisplayMode="TooltipDisplayMode.Always">
    </RangeNavigatorRangeTooltipSettings>
    <RangeNavigatorPeriodSelectorSettings>
        <RangeNavigatorPeriods>
            <RangeNavigatorPeriod Text="1M" Interval="1" IntervalType="RangeIntervalType.Months"></RangeNavigatorPeriod>
            <RangeNavigatorPeriod Text="3M" Interval="3" IntervalType="RangeIntervalType.Months"></RangeNavigatorPeriod>
            <RangeNavigatorPeriod Text="6M" Interval="6" IntervalType="RangeIntervalType.Months"></RangeNavigatorPeriod>
            <RangeNavigatorPeriod Text="YTD"></RangeNavigatorPeriod>
            <RangeNavigatorPeriod Text="1Y" Interval="1" IntervalType="RangeIntervalType.Years"></RangeNavigatorPeriod>
            <RangeNavigatorPeriod Text="All"></RangeNavigatorPeriod>
        </RangeNavigatorPeriods>
    </RangeNavigatorPeriodSelectorSettings>
    <RangeNavigatorSeriesCollection>
        <RangeNavigatorSeries DataSource="@StockData" XName="Date" YName="Close" Type="RangeNavigatorType.Area">
        </RangeNavigatorSeries>
    </RangeNavigatorSeriesCollection>
</SfRangeNavigator>

@{
    DateTime[] range = SelectedRange as DateTime[] ?? new DateTime[] { DateTime.Now, DateTime.Now };
}
<p>选定范围:@range[0].ToShortDateString()@range[1].ToShortDateString()</p>

@code {
    public object SelectedRange = new DateTime[] 
    { 
        new DateTime(2022, 01, 01), 
        new DateTime(2023, 01, 01) 
    };
    
    public List<StockInfo> StockData = GetStockData();
    
    private static List<StockInfo> GetStockData()
    {
        // 生成示例数据
        var data = new List<StockInfo>();
        var startDate = new DateTime(2020, 01, 01);
        var random = new Random();
        
        for (int i = 0; i < 100; i++)
        {
            data.Add(new StockInfo 
            { 
                Date = startDate.AddDays(i * 10), 
                Close = 100 + random.Next(-20, 20) 
            });
        }
        
        return data;
    }

    public class StockInfo
    {
        public DateTime Date { get; set; }
        public double Close { get; set; }
    }
}

2. Dashboard with Range-Based Filtering

2. 基于范围过滤的仪表板

Synchronize chart data with range selector:
razor
@using Syncfusion.Blazor.Charts

<div class="dashboard-container">
    <h3>Sales Dashboard</h3>
    <SfRangeNavigator Value="@SelectedRange"
                      ValueType="RangeValueType.DateTime"
                      Height="140px">

        <RangeNavigatorEvents Changed="OnRangeChanged" />

        <RangeNavigatorSeriesCollection>
            <RangeNavigatorSeries DataSource="@SalesDetails"
                                  XName="Date"
                                  YName="Revenue"
                                  Type="RangeNavigatorType.Area" />
        </RangeNavigatorSeriesCollection>

    </SfRangeNavigator>
    <SfChart Height="300px">
        <ChartPrimaryXAxis ValueType="Syncfusion.Blazor.Charts.ValueType.DateTime"
                           Minimum="@SelectedRange[0]"
                           Maximum="@SelectedRange[1]" />

        <ChartSeriesCollection>
            <ChartSeries DataSource="@FilteredData"
                         XName="Date"
                         YName="Revenue"
                         Type="ChartSeriesType.Column" />
        </ChartSeriesCollection>
    </SfChart>
</div>

@code {
    public DateTime[] SelectedRange =
    {
        new DateTime(2023, 01, 01),
        new DateTime(2023, 06, 30)
    };

    public List<SalesData> SalesDetails = new();
    public List<SalesData> FilteredData = new();

    protected override void OnInitialized()
    {
        SalesDetails = GetSalesData();
        ApplyFilter();
    }

    private void OnRangeChanged(ChangedEventArgs args)
    {
        if (args.Start is DateTime start && args.End is DateTime end)
        {
            SelectedRange = new[] { start, end };
            ApplyFilter();
        }
    }

    private void ApplyFilter()
    {
        FilteredData = SalesDetails
            .Where(d => d.Date >= SelectedRange[0] && d.Date <= SelectedRange[1])
            .ToList();
    }

    private List<SalesData> GetSalesData()
    {
        var data = new List<SalesData>();
        var random = new Random();
        var start = new DateTime(2023, 01, 01);
        decimal revenue = 15000;

        for (int i = 0; i < 180; i++)
        {
            revenue += random.Next(-1500, 2000);

            data.Add(new SalesData
            {
                Date = start.AddDays(i),
                Revenue = Math.Max(revenue, 5000)
            });
        }

        return data;
    }

    public class SalesData
    {
        public DateTime Date { get; set; }
        public decimal Revenue { get; set; }
    }
}
将图表数据与范围选择器同步:
razor
@using Syncfusion.Blazor.Charts

<div class="dashboard-container">
    <h3>销售仪表板</h3>
    <SfRangeNavigator Value="@SelectedRange"
                      ValueType="RangeValueType.DateTime"
                      Height="140px">

        <RangeNavigatorEvents Changed="OnRangeChanged" />

        <RangeNavigatorSeriesCollection>
            <RangeNavigatorSeries DataSource="@SalesDetails"
                                  XName="Date"
                                  YName="Revenue"
                                  Type="RangeNavigatorType.Area" />
        </RangeNavigatorSeriesCollection>

    </SfRangeNavigator>
    <SfChart Height="300px">
        <ChartPrimaryXAxis ValueType="Syncfusion.Blazor.Charts.ValueType.DateTime"
                           Minimum="@SelectedRange[0]"
                           Maximum="@SelectedRange[1]" />

        <ChartSeriesCollection>
            <ChartSeries DataSource="@FilteredData"
                         XName="Date"
                         YName="Revenue"
                         Type="ChartSeriesType.Column" />
        </ChartSeriesCollection>
    </SfChart>
</div>

@code {
    public DateTime[] SelectedRange =
    {
        new DateTime(2023, 01, 01),
        new DateTime(2023, 06, 30)
    };

    public List<SalesData> SalesDetails = new();
    public List<SalesData> FilteredData = new();

    protected override void OnInitialized()
    {
        SalesDetails = GetSalesData();
        ApplyFilter();
    }

    private void OnRangeChanged(ChangedEventArgs args)
    {
        if (args.Start is DateTime start && args.End is DateTime end)
        {
            SelectedRange = new[] { start, end };
            ApplyFilter();
        }
    }

    private void ApplyFilter()
    {
        FilteredData = SalesDetails
            .Where(d => d.Date >= SelectedRange[0] && d.Date <= SelectedRange[1])
            .ToList();
    }

    private List<SalesData> GetSalesData()
    {
        var data = new List<SalesData>();
        var random = new Random();
        var start = new DateTime(2023, 01, 01);
        decimal revenue = 15000;

        for (int i = 0; i < 180; i++)
        {
            revenue += random.Next(-1500, 2000);

            data.Add(new SalesData
            {
                Date = start.AddDays(i),
                Revenue = Math.Max(revenue, 5000)
            });
        }

        return data;
    }

    public class SalesData
    {
        public DateTime Date { get; set; }
        public decimal Revenue { get; set; }
    }
}

3. Lightweight Mode for Performance

3. 性能优化的轻量级模式

Optimize for large datasets:
razor
@using Syncfusion.Blazor.Charts

<SfRangeNavigator Value="@SelectedRange" 
                  ValueType="RangeValueType.DateTime"
                  EnableGrouping="true"
                  GroupBy="RangeIntervalType.Months"
                  AllowSnapping="true">
    <RangeNavigatorRangeTooltipSettings Enable="true"></RangeNavigatorRangeTooltipSettings>
    <RangeNavigatorSeriesCollection>
        <RangeNavigatorSeries DataSource="@LargeDataset" 
                              XName="Timestamp" 
                              YName="Value"
                              Type="RangeNavigatorType.Line">
        </RangeNavigatorSeries>
    </RangeNavigatorSeriesCollection>
</SfRangeNavigator>

@code {
    public DateTime[] SelectedRange;
    public List<DataPoint> LargeDataset = GenerateLargeDataset(10000);

    public class DataPoint
    {
        public DateTime Timestamp { get; set; }
        public double Value { get; set; }
    }
    
    private static List<DataPoint> GenerateLargeDataset(int count)
    {
        // Generate large dataset efficiently
        return Enumerable.Range(0, count)
            .Select(i => new DataPoint 
            { 
                Timestamp = DateTime.Now.AddHours(-count + i), 
                Value = Math.Sin(i * 0.1) * 100 
            })
            .ToList();
    }
}
针对大型数据集进行优化:
razor
@using Syncfusion.Blazor.Charts

<SfRangeNavigator Value="@SelectedRange" 
                  ValueType="RangeValueType.DateTime"
                  EnableGrouping="true"
                  GroupBy="RangeIntervalType.Months"
                  AllowSnapping="true">
    <RangeNavigatorRangeTooltipSettings Enable="true"></RangeNavigatorRangeTooltipSettings>
    <RangeNavigatorSeriesCollection>
        <RangeNavigatorSeries DataSource="@LargeDataset" 
                              XName="Timestamp" 
                              YName="Value"
                              Type="RangeNavigatorType.Line">
        </RangeNavigatorSeries>
    </RangeNavigatorSeriesCollection>
</SfRangeNavigator>

@code {
    public DateTime[] SelectedRange;
    public List<DataPoint> LargeDataset = GenerateLargeDataset(10000);

    public class DataPoint
    {
        public DateTime Timestamp { get; set; }
        public double Value { get; set; }
    }
    
    private static List<DataPoint> GenerateLargeDataset(int count)
    {
        // 高效生成大型数据集
        return Enumerable.Range(0, count)
            .Select(i => new DataPoint 
            { 
                Timestamp = DateTime.Now.AddHours(-count + i), 
                Value = Math.Sin(i * 0.1) * 100 
            })
            .ToList();
    }
}

Key Properties Reference

关键属性参考

Essential Properties

核心属性

PropertyTypeDescriptionDefault
Value
DateTime[] / double[]Selected range [start, end]null
ValueType
RangeValueTypeData type (DateTime, Double, Logarithmic)Double
DataSource
objectData collection for seriesnull
IntervalType
RangeIntervalTypeAxis interval (Auto, Years, Months, Days, etc.)Auto
LabelFormat
stringLabel display formatnull
Width
stringComponent width"100%"
Height
stringComponent height"80px"
Theme
ThemeVisual theme (Material, Bootstrap5, Fluent, Tailwind, Fabric, HighContrast)Material
Interval
intAxis interval value1
LogBase
doubleBase for logarithmic axis10
Orientation
OrientationHorizontal or VerticalHorizontal
属性类型描述默认值
Value
DateTime[] / double[]选定范围 [起始, 结束]null
ValueType
RangeValueType数据类型(DateTime、Double、Logarithmic)Double
DataSource
object系列的数据集合null
IntervalType
RangeIntervalType轴间隔(Auto、Years、Months、Days等)Auto
LabelFormat
string标签显示格式null
Width
string组件宽度"100%"
Height
string组件高度"80px"
Theme
Theme视觉主题(Material、Bootstrap5、Fluent、Tailwind、Fabric、HighContrast)Material
Interval
int轴间隔值1
LogBase
double对数轴的底数10
Orientation
Orientation水平或垂直Horizontal

Series Configuration

系列配置

PropertyTypeDescriptionDefault
Type
RangeNavigatorTypeSeries type (Line, Area, StepLine)Line
XName
stringX-axis data field namenull
YName
stringY-axis data field namenull
Fill
stringSeries fill colornull
Width
doubleSeries line width1
Opacity
doubleSeries opacity (0-1)1
Name
stringSeries name/labelnull
属性类型描述默认值
Type
RangeNavigatorType系列类型(Line、Area、StepLine)Line
XName
stringX轴数据字段名称null
YName
stringY轴数据字段名称null
Fill
string系列填充颜色null
Width
double系列线条宽度1
Opacity
double系列透明度(0-1)1
Name
string系列名称/标签null

Visual Properties

视觉属性

PropertyTypeDescriptionDefault
EnableGrouping
boolEnable data groupingfalse
AllowSnapping
boolSnap thumbs to data pointsfalse
EnableRtl
boolRight-to-Left supportfalse
TabIndex
intTab index for keyboard navigation0
属性类型描述默认值
EnableGrouping
bool启用数据分组false
AllowSnapping
bool将滑块对齐到数据点false
EnableRtl
bool支持从右到左false
TabIndex
int键盘导航的Tab索引0

Period Selector

周期选择器

PropertyTypeDescription
RangeNavigatorPeriodSelectorSettings
ComponentPeriod selector configuration (Enabled, Height, Position)
RangeNavigatorPeriods
CollectionPeriod button collection container
RangeNavigatorPeriod
ItemIndividual period selector button (Text, Interval, IntervalType, Selected)
属性类型描述
RangeNavigatorPeriodSelectorSettings
组件周期选择器配置(Enabled、Height、Position)
RangeNavigatorPeriods
集合周期按钮集合容器
RangeNavigatorPeriod
单个周期选择器按钮(Text、Interval、IntervalType、Selected)

Tooltip Configuration

工具提示配置

PropertyTypeDescriptionDefault
RangeNavigatorRangeTooltipSettings.Enable
boolEnable/disable tooltiptrue
RangeNavigatorRangeTooltipSettings.DisplayMode
TooltipDisplayModeDisplay mode (OnDemand, Always)OnDemand
RangeNavigatorRangeTooltipSettings.Format
stringTooltip content format templatenull
属性类型描述默认值
RangeNavigatorRangeTooltipSettings.Enable
bool启用/禁用工具提示true
RangeNavigatorRangeTooltipSettings.DisplayMode
TooltipDisplayMode显示模式(OnDemand、Always)OnDemand
RangeNavigatorRangeTooltipSettings.Format
string工具提示内容格式模板null

Axis Customization

轴自定义

PropertyTypeDescription
RangeNavigatorMargin
ComponentMargin (Left, Right, Top, Bottom)
RangeNavigatorBorder
ComponentBorder (Color, Width, DashArray)
RangeNavigatorMajorGridLines
ComponentGridlines (Width, Color, DashArray)
RangeNavigatorMajorTickLines
ComponentTick lines (Width, Color, Height)
RangeNavigatorLabelStyle
ComponentLabel styling (Color, FontFamily, Size, FontWeight)
属性类型描述
RangeNavigatorMargin
组件边距(Left、Right、Top、Bottom)
RangeNavigatorBorder
组件边框(Color、Width、DashArray)
RangeNavigatorMajorGridLines
组件网格线(Width、Color、DashArray)
RangeNavigatorMajorTickLines
组件刻度线(Width、Color、Height)
RangeNavigatorLabelStyle
组件标签样式(Color、FontFamily、Size、FontWeight)

Thumb Configuration

滑块配置

PropertyTypeDescriptionDefault
RangeNavigatorThumbSettings.Type
ThumbTypeThumb shape (Circle, Rectangle)Circle
RangeNavigatorThumbSettings.Fill
stringThumb fill color"#f3f3f3"
RangeNavigatorThumbSettings.Size
doubleThumb size in pixels15
属性类型描述默认值
RangeNavigatorThumbSettings.Type
ThumbType滑块形状(Circle、Rectangle)Circle
RangeNavigatorThumbSettings.Fill
string滑块填充颜色"#f3f3f3"
RangeNavigatorThumbSettings.Size
double滑块尺寸(像素)15

Events Reference

事件参考

Key events for handling Range Navigator interactions:
EventEvent ArgsDescription
Changed
ChangedEventArgs
Fires when range selection changes (start, end, value)
Loaded
RangeLoadedEventArgs
Fires after component loads completely
Resizing
RangeResizeEventArgs
Fires while dragging thumbs
Resized
RangeResizeEventArgs
Fires after thumb drag completes
Rendering
RangeSelectorRenderEventArgs
Fires before selector renders
TooltipRender
RangeTooltipRenderEventArgs
Fires before tooltip renders
LabelRender
RangeLabelRenderEventArgs
Fires when labels render
Example Event Handler:
csharp
private void OnRangeChanged(ChangedEventArgs args)
{
    var startValue = args.Start;  // DateTime or double
    var endValue = args.End;      // DateTime or double
    var selectedData = args.SelectedData;  // Filtered data
    StateHasChanged();
}
用于处理范围导航器交互的关键事件:
事件事件参数描述
Changed
ChangedEventArgs
当范围选择变化时触发(start、end、value)
Loaded
RangeLoadedEventArgs
组件完全加载后触发
Resizing
RangeResizeEventArgs
拖动滑块时触发
Resized
RangeResizeEventArgs
滑块拖动完成后触发
Rendering
RangeSelectorRenderEventArgs
选择器渲染前触发
TooltipRender
RangeTooltipRenderEventArgs
工具提示渲染前触发
LabelRender
RangeLabelRenderEventArgs
标签渲染时触发
事件处理程序示例:
csharp
private void OnRangeChanged(ChangedEventArgs args)
{
    var startValue = args.Start;  // DateTime或double类型
    var endValue = args.End;      // DateTime或double类型
    var selectedData = args.SelectedData;  // 过滤后的数据
    StateHasChanged();
}

Methods Reference

方法参考

Key methods for programmatic control:
MethodReturn TypeDescription
ExportAsync(ExportType, string)
Task
Export as PNG, JPEG, SVG, or PDF
Print()
Task
Print the Range Navigator
Refresh()
Task
Refresh/redraw component
GetVisibleRangeModel()
VisibleRangeModel
Get current visible range
用于编程控制的关键方法:
方法返回类型描述
ExportAsync(ExportType, string)
Task
导出为PNG、JPEG、SVG或PDF
Print()
Task
打印范围导航器
Refresh()
Task
刷新/重绘组件
GetVisibleRangeModel()
VisibleRangeModel
获取当前可见范围

Implementation Workflow

实现流程

When implementing a range selector, follow this sequence:
  1. Start with Getting Started for installation and basic setup
  2. Configure range values from Range Configuration for selection behavior
  3. Choose series type using Series Types for visualization
  4. Set up data binding from Data Binding for your data structure — when using remote data prefer trusted/internal APIs or mocked data; see Data Binding - Security Considerations
  5. Add period selector (optional) with Period Selector Integration
  6. Customize axis with Axis Customization for proper labeling
  7. Apply visual styling from Visual Customization
  8. Add export and events using Export, Events, and Accessibility
  9. Review API Reference for complete API documentation with all classes, properties, and enums
For questions or issues, refer to the troubleshooting sections in each reference file or consult Export, Events, and Accessibility for event handling patterns and accessibility requirements.
实现范围选择器时,请遵循以下步骤:
  1. 入门指南开始进行安装和基础设置
  2. 根据范围配置配置范围值以设置选择行为
  3. 使用系列类型选择系列类型进行可视化
  4. 根据数据绑定设置数据绑定以适配您的数据结构 — 使用远程数据时优先选择可信/内部API或模拟数据;请参阅数据绑定 - 安全注意事项
  5. (可选)添加周期选择器,参考周期选择器集成
  6. 根据轴自定义自定义轴以实现正确的标签显示
  7. 根据视觉自定义应用视觉样式
  8. 使用导出、事件和可访问性添加导出和事件
  9. **查看API参考**获取包含所有类、属性和枚举的完整API文档
如有疑问或问题,请参阅各参考文件中的故障排除部分,或咨询导出、事件和可访问性获取事件处理模式和可访问性要求。