syncfusion-blazor-range-selectors
Compare original and translation side by side
🇺🇸
Original
English🇨🇳
Translation
ChineseImplementing 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 () is a specialized control designed for data range selection and navigation. It combines:
SfRangeNavigator- 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, andRangeNavigatorPeriodsRangeNavigatorPeriod - 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, and tooltip settingsRangeNavigatorThumbSettings
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
核心属性
| Property | Type | Description | Default |
|---|---|---|---|
| DateTime[] / double[] | Selected range [start, end] | null |
| RangeValueType | Data type (DateTime, Double, Logarithmic) | Double |
| object | Data collection for series | null |
| RangeIntervalType | Axis interval (Auto, Years, Months, Days, etc.) | Auto |
| string | Label display format | null |
| string | Component width | "100%" |
| string | Component height | "80px" |
| Theme | Visual theme (Material, Bootstrap5, Fluent, Tailwind, Fabric, HighContrast) | Material |
| int | Axis interval value | 1 |
| double | Base for logarithmic axis | 10 |
| Orientation | Horizontal or Vertical | Horizontal |
| 属性 | 类型 | 描述 | 默认值 |
|---|---|---|---|
| DateTime[] / double[] | 选定范围 [起始, 结束] | null |
| RangeValueType | 数据类型(DateTime、Double、Logarithmic) | Double |
| object | 系列的数据集合 | null |
| RangeIntervalType | 轴间隔(Auto、Years、Months、Days等) | Auto |
| string | 标签显示格式 | null |
| string | 组件宽度 | "100%" |
| string | 组件高度 | "80px" |
| Theme | 视觉主题(Material、Bootstrap5、Fluent、Tailwind、Fabric、HighContrast) | Material |
| int | 轴间隔值 | 1 |
| double | 对数轴的底数 | 10 |
| Orientation | 水平或垂直 | Horizontal |
Series Configuration
系列配置
| Property | Type | Description | Default |
|---|---|---|---|
| RangeNavigatorType | Series type (Line, Area, StepLine) | Line |
| string | X-axis data field name | null |
| string | Y-axis data field name | null |
| string | Series fill color | null |
| double | Series line width | 1 |
| double | Series opacity (0-1) | 1 |
| string | Series name/label | null |
| 属性 | 类型 | 描述 | 默认值 |
|---|---|---|---|
| RangeNavigatorType | 系列类型(Line、Area、StepLine) | Line |
| string | X轴数据字段名称 | null |
| string | Y轴数据字段名称 | null |
| string | 系列填充颜色 | null |
| double | 系列线条宽度 | 1 |
| double | 系列透明度(0-1) | 1 |
| string | 系列名称/标签 | null |
Visual Properties
视觉属性
| Property | Type | Description | Default |
|---|---|---|---|
| bool | Enable data grouping | false |
| bool | Snap thumbs to data points | false |
| bool | Right-to-Left support | false |
| int | Tab index for keyboard navigation | 0 |
| 属性 | 类型 | 描述 | 默认值 |
|---|---|---|---|
| bool | 启用数据分组 | false |
| bool | 将滑块对齐到数据点 | false |
| bool | 支持从右到左 | false |
| int | 键盘导航的Tab索引 | 0 |
Period Selector
周期选择器
| Property | Type | Description |
|---|---|---|
| Component | Period selector configuration (Enabled, Height, Position) |
| Collection | Period button collection container |
| Item | Individual period selector button (Text, Interval, IntervalType, Selected) |
| 属性 | 类型 | 描述 |
|---|---|---|
| 组件 | 周期选择器配置(Enabled、Height、Position) |
| 集合 | 周期按钮集合容器 |
| 项 | 单个周期选择器按钮(Text、Interval、IntervalType、Selected) |
Tooltip Configuration
工具提示配置
| Property | Type | Description | Default |
|---|---|---|---|
| bool | Enable/disable tooltip | true |
| TooltipDisplayMode | Display mode (OnDemand, Always) | OnDemand |
| string | Tooltip content format template | null |
| 属性 | 类型 | 描述 | 默认值 |
|---|---|---|---|
| bool | 启用/禁用工具提示 | true |
| TooltipDisplayMode | 显示模式(OnDemand、Always) | OnDemand |
| string | 工具提示内容格式模板 | null |
Axis Customization
轴自定义
| Property | Type | Description |
|---|---|---|
| Component | Margin (Left, Right, Top, Bottom) |
| Component | Border (Color, Width, DashArray) |
| Component | Gridlines (Width, Color, DashArray) |
| Component | Tick lines (Width, Color, Height) |
| Component | Label styling (Color, FontFamily, Size, FontWeight) |
| 属性 | 类型 | 描述 |
|---|---|---|
| 组件 | 边距(Left、Right、Top、Bottom) |
| 组件 | 边框(Color、Width、DashArray) |
| 组件 | 网格线(Width、Color、DashArray) |
| 组件 | 刻度线(Width、Color、Height) |
| 组件 | 标签样式(Color、FontFamily、Size、FontWeight) |
Thumb Configuration
滑块配置
| Property | Type | Description | Default |
|---|---|---|---|
| ThumbType | Thumb shape (Circle, Rectangle) | Circle |
| string | Thumb fill color | "#f3f3f3" |
| double | Thumb size in pixels | 15 |
| 属性 | 类型 | 描述 | 默认值 |
|---|---|---|---|
| ThumbType | 滑块形状(Circle、Rectangle) | Circle |
| string | 滑块填充颜色 | "#f3f3f3" |
| double | 滑块尺寸(像素) | 15 |
Events Reference
事件参考
Key events for handling Range Navigator interactions:
| Event | Event Args | Description |
|---|---|---|
| | Fires when range selection changes (start, end, value) |
| | Fires after component loads completely |
| | Fires while dragging thumbs |
| | Fires after thumb drag completes |
| | Fires before selector renders |
| | Fires before tooltip renders |
| | 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();
}用于处理范围导航器交互的关键事件:
| 事件 | 事件参数 | 描述 |
|---|---|---|
| | 当范围选择变化时触发(start、end、value) |
| | 组件完全加载后触发 |
| | 拖动滑块时触发 |
| | 滑块拖动完成后触发 |
| | 选择器渲染前触发 |
| | 工具提示渲染前触发 |
| | 标签渲染时触发 |
事件处理程序示例:
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:
| Method | Return Type | Description |
|---|---|---|
| | Export as PNG, JPEG, SVG, or PDF |
| | Print the Range Navigator |
| | Refresh/redraw component |
| | Get current visible range |
用于编程控制的关键方法:
| 方法 | 返回类型 | 描述 |
|---|---|---|
| | 导出为PNG、JPEG、SVG或PDF |
| | 打印范围导航器 |
| | 刷新/重绘组件 |
| | 获取当前可见范围 |
Implementation Workflow
实现流程
When implementing a range selector, follow this sequence:
- Start with Getting Started for installation and basic setup
- Configure range values from Range Configuration for selection behavior
- Choose series type using Series Types for visualization
- 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
- Add period selector (optional) with Period Selector Integration
- Customize axis with Axis Customization for proper labeling
- Apply visual styling from Visual Customization
- Add export and events using Export, Events, and Accessibility
- 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.
实现范围选择器时,请遵循以下步骤:
- 从入门指南开始进行安装和基础设置
- 根据范围配置配置范围值以设置选择行为
- 使用系列类型选择系列类型进行可视化
- 根据数据绑定设置数据绑定以适配您的数据结构 — 使用远程数据时优先选择可信/内部API或模拟数据;请参阅数据绑定 - 安全注意事项
- (可选)添加周期选择器,参考周期选择器集成
- 根据轴自定义自定义轴以实现正确的标签显示
- 根据视觉自定义应用视觉样式
- 使用导出、事件和可访问性添加导出和事件
- **查看API参考**获取包含所有类、属性和枚举的完整API文档
如有疑问或问题,请参阅各参考文件中的故障排除部分,或咨询导出、事件和可访问性获取事件处理模式和可访问性要求。