using Arction.Wpf.Charting;
namespace ExampleProject
public partial class ExampleApp : Page
private LightningChart _chart = null;
public ExampleApp()
InitializeComponent();
CreateChart();
private void CreateChart()
_chart = new LightningChart();
(Content as Grid).Children.Add(_chart);
_chart.BeginUpdate();
_chart.EndUpdate();
从工具箱添加至Windows Forms 项目
将LightningChart控件从toolbox添加至设计窗中,会出现一个图表,其属性显示在Properties 窗口中。
图:在Windows Forms 设计窗中添加LightningChart控件
对属性可以进行自由修改。此外,还可以将新的系列和其他对象插入到其集合中。系列数据点必须通过代码表示。
事件处理程序
图表主级别的事件处理程序,可以使用属性网格进行分配。对于已添加至集合的对象而言,必须通过代码来分配事件处理程序。
有关更新版本的最佳方法
图表属性数据经过序列化,存放至Visual Studio项目的.resx文件中。版本更新后,LightningChart API会出现一点小变化,可能导致在.resx文件中新版本存在不兼容的序列化结果。
为了便于更新,强烈建议创建图表对象,以代码形式添加所有系列、事件处理程序等。然后项目正确加载,在编译时显示可能的错误,这让修复这些错误比修复.resx文件更容易。采用.resc文件,一些属性定义可能会丢失,但采用代码,这些属性的具体定义一直都不会变。
从工具箱添加至WPF 项目
从toolbox向Window或另一个容器添加LightningChart全绑定WPF控件。图表会出现在设计窗口,并且其属性会在Properties窗口显示出。XAML编辑器可以显示出具体内容以及对图表默认属性做出的修改。
对属性不仅可以进行自由修改,而且可以将新的系列以及其他对象插入到其集合中。系列数据点必须采用代码形式表示。
事件处理程序
图表主级别的事件处理程序,可以使用属性网格进行分配。对于已添加至集合的对象而言,必须通过代码来分配事件处理程序。
图:添加LightningChart控件至WPF设计窗.
添加至Blend WPF 项目
在“Projects”选项卡中,选择“References”。右键单击并选择“Add reference…”,然后浏览,从c:\program files (x86)\Arction\LightningChart .NET SDK v.10\LibNet4中搜寻到 Arction.WPF.Charting.LightningChart.dll 文件。
选择“Assets”选项卡。然后在搜索框中输入“Lightning”。在搜索结果中会显示带有LightningChart的行。再将对象拖动到WPF窗口中。
图:将LightningChart控件添加至Blend For Visual Studio 2013 设计窗中
有关版本更新的最佳方法
图表属性数据采用XAML存储。新版本的属性设置略有不同,会导致LightningChart对象不会出现在设计窗中。随后需要进行相关的XAML修改。XAML 标签树可能会非常庞大,并且可能会非常难以进行编辑。
为了便于更新,强烈建议在设计窗中创建图表对象,设置好其布局,并对齐相关属性。使用代码设置其他部分。或者图表对象也使用代码创建。
防止图表模糊
这是WPF的一个共同特征,而且与图表本身无关,但采用LightningChart精确渲染后会变得清晰明显。
设置图表父控件UseLayoutRounding = True ,可以防止图表看上去模糊不清。虽然图表在设计窗中可能仍然看上去模糊,但是当运行应用程序后会看的很清晰。父控件例如Grid, Canvas, DockManager等。
创建UWP项目
在UWP中使用LightningChart与在全绑定WPF 图表使用的工作原理类似,因为都具有类似的绑定和MVVM功能。UWP图表的属性集合与全绑定WPF图表一样, (比如ViewXY轴、3D光)默认为空值。Windows 10和Visual Studio 2017或2019需要使用LightningChart来开发UWP应用程序。Universal Windows Platform开发也应该安装在Visual Studio上进行。
Microsoft.NETCore.UniversalWindowsPlatform:6.2.8或更高版本(Nuget程序包)。
Microsoft.Toolkit.Uwp:v 4.0.0或更高版本,建议6.0.0或更高版本。 请注意,最新的工具包可能与较早的目标版本不兼容。
创建UWP应用
利用LightningChart按照以下步骤创建UWP应用程序:
用Visual Studio创建一个新项目。选择 Blank App (Universal Windows).
给项目命名,并选择文件位置。
为项目设置 Target 和 Minimum 版本,具体要根据电脑上安装的SDK来选择。了解更多信息,可参阅 Microsoft文件: docs.microsoft.com/en-us/windo…. 推荐16299版及以上版本。注意,之后通过Project -> Properties可进行更改。
图:为UWP选择 Target 和 Minimum 版本。
使用 Target 版本 2004 或更新版本时,应禁用 TypeInfoReflection 设置。 打开.csproj 项目文件例如在文本编辑器中,并将以下行添加到每个 PropertyGroup定义构建条件(Debug|x86、Release|x86 等):
<EnableTypeInfoReflection>false</EnableTypeInfoReflection>
将 LightningChart 和 SharpDX 组件添加到参考中。 默认情况下,这些可以在
图:UWP程序集添加到项目参考中
为项目安装 Microsoft.Toolkit.Uwp NuGet 程序包。推荐6.0版或更新版本。
UWP需要在应用程序中设置开发者密钥。通过“Copy UWP developer key to clipboard” 按键从LicenseManager提取密钥,然后用LightningChart.SetUwpDeveloperKey()方法在App.Xaml.cs文件中进行设置。
图:用 LicenseManager将UWP开发者密钥复制到剪切板。
图:在App.Xaml.cs 文件中设置UWP开发者密钥。
现在可以在代码或 xaml 编辑器中创建 LightningChart 组件。图表。示例,用代码创建UWP:
using Arction.Uwp.ChartingMVVM;
namespace ExampleProject
public sealed partial class MainPage : Page
private LightningChart _chart = null;
public MainPage()
InitializeComponent();
CreateChart();
private void CreateChart()
_chart = new LightningChart();
(Content as Grid).Children.Add(_chart);
_chart.BeginUpdate();
_chart.EndUpdate();
构建、部署并运行应用程序。如果应用程序不可运行(例如出现“Activation of the Windows Store app”错误),往往更改Target和Minimum版本即可解决问题。
在向其他电脑部署 UWP时,须应用部署密钥(参阅[# LightningChart数据可视化图形控件使用篇2-License许可证管理](LightningChart数据可视化图形控件使用篇2-License许可证管理 - 掘金 (juejin.cn)))。部署密钥不能与开发密钥一起使用。所以,在部署时要删除开发者密钥设置。
UWP 疑难解答
UWP 项目有一些已知问题。 这些通常与 LightningChart 无关,但通常与 UWP 相关。 因此,建议从网上搜索其他信息。 在任何情况下,如果您有任何问题,请随时联系支持人员 (support@lightningchart.com)。或微信联系:lightningchart_china
一些已知的 UWP 问题:
版本 1903 不起作用。可能会出现错误,例如构建错误 MSB4166: Child node "2"过早退出
这是 1903 特有的已知问题。最好的解决方法是简单地使用不同的目标版本。 Microsoft 建议改为以 2004 版(内部版本 19041)为目标。
发布版本不起作用。
尝试通过项目的 Properties -> Build 禁用 Compile with .NET Native 工具链
调试构建不起作用
在某些 UWP 版本(例如 2004 版)中,调试版本可能无法运行并给出错误:Run Error: an unhandled win32 exceptio occurred in [3088] (number is different for different build).。在这些情况下,请确保您已将 <EnableTypeInfoReflection>false</EnableTypeInfoReflection>
行添加到您的csproj 文件中。或者,尝试改用发布版本。
激活 Windows 应用商店应用“App name”失败。
尝试清除方案。删除 bin 和 obj 文件夹并按照[此处的说明](Diagnosing Debugger App Activation Errors | Microsoft Docs)重建。
掌握LightningChart对象模型的最好方法是使用Visual Studio的Properties editor(属性编辑器)。
图:在Windows Forms和WPF 的Properties窗口的Chart一级中,可以找到LightningChart的详细属性。通过扩展节点或者在WPF中创建新的对象,可以得到一组庞大的属性。
Windows Forms、 WPF及UWP之间的区别
就Chart一级而言,Windows Forms和WPF的属性树以及对象模型几乎是完全相同的。二者主要不同之处如下;
表:Windows forms、 WPF与UWP的不同之处
在接下来的章节中,除非另有说明,否则将引用Windows Forms的属性名称。
LightningChart视图
LightningChart的主要视图如下:
ViewXY (详情见后续更新文章:ViewXY)
View3D (详情见后续更新文章:View3D)
ViewPie3D (详情见后续更新文章:ViewPie3D)
ViewPolar (详情见后续更新文章:ViewPolar)
ViewSmith (详情见后续更新文章:ViewSmith)
通过设置ActiveView属性可以对可视化视图进行更改。默认视图为ViewXY。
// 设置可视化视图为3D
// 设置可视化视图为3D
chart.ActiveView = ActiveView.View3D
视图与缩放区域定义
LightningChart视图包含了几个不同的区域,各自反映了不同的信息。这些区域根据视图的内容可以看做是几个平面矩形,但无论视图类型如何,这些定义都是一致的;特别是在缩放操作时,将决定要显示图表的哪部分区域。
-ChartArea/ViewArea: 整个区域包含图表及图边距。
-MarginRectangle: MarginRectangle (或 MarginRect)包括图边距内部的区域.
-GraphArea: 该区域由轴范围界定。包含主网格及次网格。除非某些数据值超出了轴范围,否则数据会绘制在这个区域中。
-Background area / circle: 基本上和GraphArea一样。还包含轴范围与网格之外的图形部分。
-LabelsArea: 该区域包括图形及轴标签。忽略了数据。
-Data: 该区域仅包含数据。由数据的最大与最小值决定。
-DataAndLabelsArea: 结合了Data 和 LabelsArea 两个部分。包括了所有的数据、轴、标签以及标记。
-Border: 一个可自定义的1像素宽的矩形,指示出图边距的位置。通过禁用/启用可以显示或者隐藏。
-Margins: 图边距是图形区域周围的空白区域。视图的大部分内容都填置在图边距内,图边距外部分都会被剪切掉。
-ZoomPadding: 该区域是在缩放操作后,图边距与另外的预定义区域之间留出的空间(详情见后续更新文章:ZoomPadding)。在ViewXY视图中没有作用。
图:视图与缩放区域的定义
设置背景填充
所有的视图的背景填充都一样。
• 在WinForms中使用chart.Background
chart.Background.Color = Color.DarkBlue
• 在WPF中使用chart.ChartBackground
chart.ChartBackground.Color = Colors.DarkBlue
背景填充支持以下几种方式:
• 纯色填充。设置GradientFill = Solid ,然后用Color 来定义颜色。
• 渐变填充,改 Color 为 GradientColor。设置 GradientFill = Linear / Radial / RadialStretched / Cylindrical,用GradientDirection来控制渐变方向为Linear(线性)或是Cylindrical(圆柱形 )。
chart.ChartBackground.GradientFill = GradientFill.Cylindrical;
chart.ChartBackground.GradientColor = Colors.Black;
chart.ChartBackground.GradientDirection = -45;
• 位图填充,有几个不同的平铺和拉伸选项。还支持位图着色与透明度调节,可设置半透明填充位图。
图:在Background中为背景选项,在 ViewXY列下为参数。 GradientFill = Solid,Color = DimGray
图:在View3D 视图模式下,设置背景(Background)为渐变圆柱形。GradientFill = Cylindrical, Color = Maroon, GradientColor = Black. GradientDirection = -45 degrees(度)
图:在ViewPolar 视图模式设置背景为平铺位图填充。 Style = Bitmap, 设置一张图片 Bitmap.Image, Bitmap.Layout = Tile
设置透明背景
在WPF中,可将图表设置成显示为透明,这样在图表下方的对象可以透过图表显示出来。
图: WPF图表中的透明背景
设置 ChartBackground.Color = #00000000(全透明黑色)
注意!不要设置 ‘Transparent’ (#00FFFFFF)。该设置无法穿透显示。
WinForms不支持控件透明背景。
配置外观/性能设置
ChartRenderOptions (在WinForms 中为RenderOptions)包含用于配置外观和性能的属性。
图:RenderOptions 下的属性.
DeviceType
// 通过代码更改渲染设备
chart.ChartRenderOptions.DeviceType = RendererDeviceType.Auto
Auto 也称为AutoPreferD11 选项,此为默认设置。
AutoPreferD9 更倾向于 DirectX9 硬件渲染,并根据可用性依照顺序:HW9 -> HW11 -> SW11 -> SW9自动选择设备。当硬件不可用时,则会返回至WARP(SW11)软件渲染。
AutoPreferD11更适合DirectX11硬件渲染,并根据可用性依照顺序:HW11 -> HW9 -> SW11 -> SW9 自动选择设备。当硬件不可用时,则会返回至WARP(SW11)软件渲染。这可作为一种通用的高性能和最佳外观设置使用。 比起采用DirectX9渲染程序,视觉外观会更好。
HardwareOnlyD9 仅使用hardware 9来进行渲染。
HardwareOnlyD11仅使用hardware 11来进行渲染。
SoftwareOnlyD11 使用DirectX11 WARP,这与DirectX9参考光栅设备相比非常快(但比硬件选项慢)
SoftwareOnlyD9 使用DirectX9参考光栅设备(非常慢)
None 如果图表被隐藏或者在背景中处于非使用状态,设置DeviceType为None,可以将图表资源释放给其他图表。
GPUPreference
chart.ChartRenderOptions.GPUPreference = GPUPreference.SystemSetting
适用于带有双图形适配器系统的计算机,主要是带有集成了低性能GPU的CPU/芯片组和较高性能图形GPU(例如AMD或者Nvidia)的笔记本电脑。
SystemSetting使用在Windows、AMD或Nvidia控制面板的图形设置中可选择的选项。
PreferHighPerformanceGraphics 使用高性能GPU(若系统中存在)。通常会带来更佳的新能表现,但能耗较高。
PreferLowPowerGraphics 使用较低性能的集成GPU(即便系统中安装有高性能的GPU)
默认情况下,PreferHighPerformanceGraphics 为首选。不要取消此项会获得最佳的性能。
FontsQuality
chart.ChartRenderOptions.FontsQuality = FontsRenderingQuality.High
Low 性能最佳,字体边缘更光滑。仔细选择字体类型,获得最合意的外观效果。
Mid 其性能与Low几乎相似。字体边缘同样具有反锯齿效果。此项为默认设置。
High 外观最佳,但对性能表现有很大影响。
注意: 出于渲染技术限制,透明背景不适用于采用High特性设置的DirectX 11 渲染,但可适用于DirectX9 。
AntiAliasLevel
chart.ChartRenderOptions.AntiAliasLevel = 1
全屏反锯齿系数。其实用性取决于硬件。值越大,外观越好,但是性能越差。设置0或1以达到性能最大化。有关反锯齿设置的更多信息,请参阅第本章文末反锯齿。
WaitForVSync
chart.ChartRenderOptions.WaitForVSync = true
建议: 保持默认值。 启用后,持续渲染,直到下一次刷新(例如,1/60 秒的下一个倍 数)。这只是暂时性建议,例如采用当与外部屏幕捕获应用程序同步,以防止出现条带化,或当屏幕顶部的图像与屏幕底部不同步时。这可能显示为中断的波形数据。在启用后,特别是在WPF中,性能会受到明显影响。
UpdateType
chart.ChartRenderOptions.UpdateType = ChartUpdateTypes.Sync
Sync (default): 图表同步更新。图表在最后一次EndUpdate()调用后更新,或者当设置属性(或调用一个method)会改变图表时更新。属性的改变(没有BeginUpdate…EndUpdate)会引发即时渲染新帧。
Async: 图表以异步方式更新。图表在属性改变后将尽快更新,但是图表将在随后的某个的点渲染一个新帧。这也许让图表在某些情况下更方便使用。
LimitedFrameRate: 帧率受限于在FrameRateLimit属性中规定的值。0 = 无限制。例如,如果想要最大每秒刷新10次,则设置值为10。这与Async选项类似,但会防止在第一个帧之后立即渲染新的帧,如此以来,减少帧率,但节省了系统资源。
注意! 确保在LimitedFrameRate和Async模式下正确的线程处理。如果异步更新图表,并且图表属性也同时更新,可能会引发冲突,导致图表或应用程序奔溃。
InvokeRenderingInUIThread
chart.ChartRenderOptions.InvokeRenderingInUIThread = true
在应用程序中使用后台时,来自该线程的所有UI更新都必须通过Invoke(在WinForms中为Control.Invoke(),在WPF中为Dispatcher.Invoke())
在启用后,渲染部分将使用内部调用来处理UI线程。
默认值为False,因为以线程安全的方式设置属性和调用方法也应该要注意到,即使启用了此属性,也要防止在图表的内部状态中发生线程冲突。
HeadlessMode
chart.ChartRenderOptions.HeadlessMode = true
将此值设置为True,可以在后台服务、控制台应用程序或其他没有用户界面的应用程序中使用图表。(详情见后续更新文章:Headless mode(无头模式))
DPI 处理器
默认情况下,WPF应用程序支持DPI(Dots Per Inch每英寸点数),而WinForms应用程序不支持。此外,DPIs还可用以代替像素来测量尺寸大小。LightningChart 不支持Per-Monitor DPI 感知,但支持系统感知,这意味着WPF应用程序支持DPI系统。 在WinForms 中,默认DPI为72,但若加载了wpf .dll 文件的话可以忽略,该值会变为96。
然而,当移动到具有不同DPI设置的另一个屏幕时,LightningChart不会自动调整大小。要启用大小调整,需要把ChartOptions 中的AllowDPIChangeInduceWindowsResize 属性设置为true 。或者,用户可以注册到OnDPIChanged事件并更改它的allowWindowResize属性。这些在WinForms不起作用。
chart.Options.AllowDPIChangeInduceWindowResize = true;
chart.OnDPIChanged += chart_OnDPIChanged;
private void chart_OnDPIChanged(LightningChart chart, float dpix, float dpiy, ref bool allowWindowResize)
allowWindowResize = true;
DpiHelper类
LightningChart 的DpiHelper 类,包含与DPI相关的问题的helper类。
DpiAware 声明系统进程是否被DPI感知。但是,目前还无法区分系统感知和per-monitor感知。
bool isDPIAware = DpiHelper.DpiAware
DpiXFactor/ DpiYFactor 是屏幕宽度/高度的系统DPI的有效缩放系数。该系数说明了在X/Y方向上每一个DPI有多少个实际像素。
float dpiXFactor = DpiHelper.DpiXFactor
DipToPx and PxToDip 方法使用系统DPI设置将DIP转换为像素,反之亦然。它们可以转换单个点或像素,也可以转换矩形的大小和位置值。
double pixelValue = DpiHelper.DipToPx(dipValue)
LightningChart® .NET 支持反锯齿渲染。可以应用于具有AntiAliasing属性的对象。通过反锯齿,线条等的边缘可以渲染的更加平滑,呈现出更圆滑的图形外观,但是随着性能成本的增加,CPU/GPU的消耗也会随之增加。
启动反锯齿
通过AntiAliasing属性可以控制反锯齿,即根据相关组件通过一个布尔值或LineAntialias枚举设置。对于后者而言,目前有两个可用的选项:
LineAntialias.None
LineAntialias.Normal
seriesEventMarker.Symbol.Antialiasing = true;
pointLineSeries.LineStyle.AntiAliasing = LineAntialias.Normal;
图表的AntiAliasLevel 系数也会影响反锯齿效果。这一系数基于所选的渲染引擎(DirectX9和DirectX11)来定义应用的反锯齿模式。设置反锯齿级别为0或1,结果是渲染时不应用反锯齿,即使个别组件的AntiAliasing属性设置为true或LineAntialias.Normal。
通过图表的渲染选项可以设置AntiAliasLevel 值:
// 反锯齿系数。值0和1都不会应用反锯齿。
chart.ChartRenderOptions.AntiAliasLevel = 2
没有手动设置该值时,AntiAliasLevel默认为4。
DirectX 11 反锯齿
在DirectX11 中,当用反锯齿渲染时,有几个共同的特点应该考虑到:
• 如果设置的值大于1,那么设置AntiAliasLevel 值会覆盖AntiAliasing属性,也就说,即使AntiAliasing属性设置为false或者LineAntialias.None,也会使用反锯齿来完成渲染。唯一的例外情况是应用LineOptimization.Hairline(只适用于使用3D渲染)。
• LineAntiAliasType 可用于选择是使用alpha-blending反锯齿(ALAA),还是使用quadrilateral反锯齿(QLAA):
LineAntiAliasingType.ALAA
LineAntiAliasingType.QLAA
chart.ChartRenderOptions.LineAAType2D = LineAntiAliasingType.ALAA;
RasterizerStateDescription的 IsMultisampleEnabled 和 IsAntialiasedLineEnabled 设置还会以以下方式(只适用于渲染线条line rendering)影响QLAA 和 ALAA 渲染:
• 如果RasterizerStateDescription.IsMultisampleEnabled == true,用QLAA
• 如果 RasterizerStateDescription.IsMultisampleEnabled == false,用ALAA
• 如果 RasterizerStateDescription.IsAntialiasedLineEnabled == true,用ALAA ,这只有在同时RasterizerStateDescription.IsMultisampleEnabled == false的时候才有效。
注意!利用DirectX11进行3D渲染时,除非设置AntiAliasLevel值为0或1,否则所有三角线都总是用反锯齿渲染。
关于LightningChart数据可视化图形控件使用篇3-LightningChart组件章节就分享到这里了。
如果在实际应用中遇到技术问题或需要帮助,可以添加下方微信号联系官方技术支持。
微信号:lightningchart_china
如果您想进一步使用LightningChart数据可视化图形控件,请添加后回复“学习”可免费领取一套全功能版LightningChart数据可视化控件。
后续我会不断更新LightingChart更详细的使用方法,写文不易,还望多多回复关注支持!谢谢!
最新版V10 LightningChart下载地址:猛击下载