【WPF】ChartControl的使用
一、前言
本月正好做一些关于工程4D,5D的界面展示,正好要用到Dev控件中的ChartControl控件,也就是图表控件。
折腾了两星期完成了一个比较能说的过去的界面吧。(领导要求高,可能不是这么想的吧,哈哈)
二、ChartControl的UI解读
<dxc:ChartControl Name="SheduleBarChart" BorderThickness="">
<dxc:ChartControl.Legend>
<dxc:Legend Orientation="Vertical"
HorizontalPosition="RightOutside"
VerticalPosition="Top" FontSize="" />
</dxc:ChartControl.Legend>
<dxc:ChartControl.Titles>
<dxc:Title Dock="Top"
HorizontalAlignment="Center"
FontSize=""
Content="工程类型统计图" />
</dxc:ChartControl.Titles>
<dxc:XYDiagram2D EnableAxisXNavigation="True" >
<dxc:XYDiagram2D.AxisX>
<dxc:AxisX2D x:Name="BaraxisX" TickmarksMinorVisible="False" TickmarksVisible="False">
</dxc:AxisX2D>
</dxc:XYDiagram2D.AxisX>
<dxc:XYDiagram2D.AxisY>
<dxc:AxisY2D>
<dxc:AxisY2D.Title>
<dxc:AxisTitle Content="工程累计量" />
</dxc:AxisY2D.Title>
<dxc:AxisY2D.WholeRange>
<dxc:Range MinValue="" AutoSideMargins="True"/>
</dxc:AxisY2D.WholeRange>
<dxc:AxisY2D.NumericOptions>
<dxc:NumericOptions Format="Number"/>
</dxc:AxisY2D.NumericOptions>
</dxc:AxisY2D>
</dxc:XYDiagram2D.AxisY>
<dxc:BarSideBySideStackedSeries2D DisplayName="(计划)长度(m)" Visible="{Binding PlanVisible}"
DataSource="{Binding PlanLengthList}"
ArgumentDataMember="ProjectName" ArgumentScaleType="Auto"
ValueDataMember="ProjectValue" ValueScaleType="Numerical" />
<dxc:BarSideBySideStackedSeries2D DisplayName="(计划)面积(m2)" Visible="{Binding PlanVisible}"
DataSource="{Binding PlanAreaList}"
ArgumentDataMember="ProjectName" ArgumentScaleType="Auto"
ValueDataMember="ProjectValue" ValueScaleType="Numerical" />
<dxc:BarSideBySideStackedSeries2D DisplayName="(计划)体积(m3)" Visible="{Binding PlanVisible}"
DataSource="{Binding PlanVolumeList}"
ArgumentDataMember="ProjectName" ArgumentScaleType="Auto"
ValueDataMember="ProjectValue" ValueScaleType="Numerical" />
<dxc:BarSideBySideStackedSeries2D DisplayName="(实际)长度(m)" Visible="{Binding PracticeVisible}"
DataSource="{Binding PracticeLengthList}"
ArgumentDataMember="ProjectName" ArgumentScaleType="Auto"
ValueDataMember="ProjectValue" ValueScaleType="Numerical" />
<dxc:BarSideBySideStackedSeries2D DisplayName="(实际)面积(m2)" Visible="{Binding PracticeVisible}"
DataSource="{Binding PracticeAreaList}"
ArgumentDataMember="ProjectName" ArgumentScaleType="Auto"
ValueDataMember="ProjectValue" ValueScaleType="Numerical" />
<dxc:BarSideBySideStackedSeries2D DisplayName="(实际)体积(m3)" Visible="{Binding PracticeVisible}"
DataSource="{Binding PracticeVolumeList}"
ArgumentDataMember="ProjectName" ArgumentScaleType="Auto"
ValueDataMember="ProjectValue" ValueScaleType="Numerical" />
</dxc:XYDiagram2D>
<dxc:ChartControl.ToolTipController>
<dxc:ChartToolTipController AutoPopDelay=""/>
</dxc:ChartControl.ToolTipController>
</dxc:ChartControl>
<ChartControl>
Legend:指的是图表曲线的标签,指明该曲线表示的是什么曲线,其曲线颜色是什么。主要设置其HorizontalPosition与VerticalPosition。
Titles: 指的是图表的主题,例如:工程统计图、财务报表、数据分析图等等。主要设置其Dock(Title的位置),以及一些文字相关的设置。
</ChartControl>
<XYDiagram2D>
AxisX: 设置x轴,TickMarksVisible指的是刻度是否显示,TickMarksMinorVisible指的是最小刻度是否显示
Title:设置坐标轴的标题,比如横坐标为时间,纵坐标为量等等
WholeRange:坐标轴的整个范围,这个范围大于等于VisualRange
VisualRange:坐标轴的可视范围,当前图表的坐标范围,假如横坐标为1—100,如果你滚动横向滑轮到5-10,那么5-10就是VisualRange
值得注意的是做Revit二次开发时设置这两个属性用dev的mvvm模式绑定很容易导致revit崩溃(15.2系列)
</XYDiagram2D>
如果你的图表的横坐标是DateTime类型,你还可以设置横坐标的显示间隔是“天”、“周”、“月”、“季”、“年”等等
<dxc:AxisX2D x:Name="axisX" TickmarksMinorVisible="False" TickmarksVisible="False" >
<dxc:AxisX2D.DateTimeScaleOptions>
<dxc:ManualDateTimeScaleOptions MeasureUnit="{Binding MinUnit,Mode=TwoWay}" />
</dxc:AxisX2D.DateTimeScaleOptions>
</dxc:AxisX2D>
就是上面的MeasureUnit
三、ChartControl的曲线类型
曲线类型的选择需要你根据自身项目的因素去选择合适的曲线类型,在心中想好要表现的曲线类型后,可以去Dev官网找找你想的那种曲线的名称类型是什么,一般曲线的UI形式如下:
<dxc:LineSeries2D Visible="{Binding PlanVisible}" DisplayName="工程" DataSource="{Binding PlanMasonryVolumeList}"
ArgumentDataMember="TaskTime" ArgumentScaleType="DateTime"
ValueScaleType="Numerical" ValueDataMember="TaskValue"/>
DisplayName:曲线的显示名称,主要用于在Legend显示
Visible:曲线的可见性
DataSource:曲线的数据源,用于MVVM数据绑定
ArgumentDataMember:横轴值
ArgumentScaleType: 横轴值的数据类型
ValueDataMember:纵轴值
ValueScaleType: 纵轴值得数据类型
四、ChartControl的鼠标纵线取值
Dev的ChartControl会自带一个鼠标纵线用于方便的知道鼠标所指当前位置的横坐标信息与纵坐标信息

如果你想取得当前鼠标所在位置的横坐标信息与纵坐标信息,可以让ChartControl添加一个MouseMove事件,在事件中:
private void chartControl1_MouseMove(object sender, MouseEventArgs e)
{
ChartHitInfo hitInfo = chartControl1.CalcHitInfo(e.GetPosition(chartControl1)); if (hitInfo != null && hitInfo.SeriesPoint != null)
{
SeriesPoint point = hitInfo.SeriesPoint; tooltip_text.Text = string.Format("Series = {0}\nArgument = {1}\nValue = {2}",
point.Series.DisplayName, point.Argument, point.Value);
tooltip1.Placement = PlacementMode.Mouse; tooltip1.IsOpen = true;
Cursor = Cursors.Hand;
}
else
{
tooltip1.IsOpen = false;
Cursor = Cursors.Arrow;
}
}
五、ChartControl的图表的导出
在xaml.cs文件中,基本上稍微复杂的情况都包含在里面了。
public ScheduleAxisPage()
{
InitializeComponent(); ExportCost.Click += new RoutedEventHandler(OnExportChartClick);
ExportProjectType.Click += new RoutedEventHandler(OnExportChartClick);
this.DataContext = new ScheduleAxisViewModel();
} private void OnExportChartClick(object sender, RoutedEventArgs e)
{ var dlg = QSContainer.Resolve<ISaveFileDialogService>();
dlg.Filter = "PDF file (*.pdf)|*.pdf|Image files (*.bmp;*.jpg;*.png)|*.bmp;*.jpg;*.png";
if (sender == ExportCost)
{
dlg.DefaultFileName = "schedule_cost.pdf";
}
else if (sender == ExportProjectType)
{
dlg.DefaultFileName = "schedule_projectType.pdf";
} if (!dlg.ShowDialog())
{
return;
} var filePath = dlg.GetFullFileName();
var ext = System.IO.Path.GetExtension(filePath); var chart = SheduleChart;
if (sender == ExportCost)
{
chart = SheduleChart;//chart's name
}
else if(sender == ExportProjectType)
{
if(LineGrid.Visibility==Visibility.Visible)
{
chart = SheduleLineChart; //chart's name
}
else
{
chart = SheduleBarChart;//chart's name } } PrintSizeMode sizeMode = PrintSizeMode.Stretch;
if (ext == ".pdf")
{
chart.ExportToPdf(filePath, sizeMode); try
{
Process.Start(filePath);
}
finally { }
}
else if (ext == ".bmp" || ext == ".jpg" || ext == ".png")
{
chart.ExportToImage(filePath, sizeMode);
try
{
Process.Start(filePath);
}
finally { }
}
}
六、ChartControl的效果

上述图表中删除了些公司的相关项目信息,总之本文的ChartControl的内容已经足够满足日常使用了,加上MVVM模式会让你更加锦上添花。
我觉得在学习Dev控件中给我最多帮助的还是Dev的帮助文档与帮助实例。大多数程序员的英语还是比较过关的,看懂官网上的英语文档应该不是什么难事。
这几天发现园内一篇博客描述ChartControl样式的,结合阅读更佳 http://www.cnblogs.com/kybs0/p/5893653.html
【WPF】ChartControl的使用的更多相关文章
- WPF DEV控件-ChartControl用法
WPF常用的第三方控件集,DevExpress 下面介绍如何生成Chart界面: <dxc:ChartControl AnimationMode="OnDataChanged" ...
- WPF DevExpress ChartControl用法
WPF常用的第三方控件集,DevExpress中ChartControl的使用 下面介绍如何生成Chart界面: <dxc:ChartControl AnimationMode="On ...
- WPF DevExpress ChartControl使用之XYDiagram
WPF使用Dev和WinForm有许多不同,相对而言,WPF要更简单和炫酷一点,我只做了一点基本的功能,没有仔细的研究,这里只介绍一下WPF Dev ChartControl绘制XYDiagram的基 ...
- WPF DEV dxc:ChartControl 柱状图
先上效果图: <UserControl xmlns:dxc="http://schemas.devexpress.com/winfx/2008/xaml/charts" mc ...
- WPF DevExpress ChartControl使用之PieChart
饼状图要比XYDiagram要简单一点,大体上也是那些东西,没有了X.Y坐标轴,也就没有了第二坐标,要简单一点.PieChartControl.xaml <UserControl x:Class ...
- WPF Devexpress 控件库中ChartControl 实现股票分时走势图
概要 从事金融行业开发 ,会接触些图表控件,这里我分享一下自己基于DevExpress.Charts.v16.2开发的股票分时走势图的经验. 附上源码:点击跳转 如果需要讨论,Q群:580749909 ...
- WPF Devexpress ChartControl CrosshairLabel显示内容居右
源码可加Q群:580749909. 一.解决的问题 ChartControl中希望CrosshairLabel的内容据右 or 自定义 二.实现. 多个显示实例(实例:条形,线形,点等等)下的内容设置 ...
- [WPF系列]从基础起步学习系列计划
引言 WPF技术已经算不什么新技术,一搜一大把关于WPF基础甚至高级的内容.之前工作中一直使用winform所以一直没有深入学习WPF,这次因项目中使用了WPF技术来实现比较酷的展示界面.我在这里只是 ...
- Devexpress系列一 之 ChartControl 柱形图BarSideBySideSeries2D
这一篇是讲的是简单的柱形图, 柱形图运行效果如下图: 新建WPF窗体应用程序后(WPF用户控件也可以),工程引用DevExpress.Xpf.Charts.v17.1.dll, 在XAML头部引用名称 ...
随机推荐
- Android业务组件化之子模块SubModule的拆分以及它们之间的路由Router实现
前言: 前面分析了APP的现状以及业务组件化的一些探讨(Android业务组件化之现状分析与探讨),以及通信的桥梁Scheme的使用(Android业务组件化之URL Scheme使用),今天重点来聊 ...
- jQuery动画-圣诞节礼物
▓▓▓▓▓▓ 大致介绍 下午看到了一个送圣诞礼物的小动画,正好要快到圣诞节了,就动手模仿并改进了一些小问题 原地址:花式轮播----圣诞礼物传送 思路:动画中一共有五个礼物,他们平均分布在屏幕中,设置 ...
- CRL快速开发框架系列教程十二(MongoDB支持)
本系列目录 CRL快速开发框架系列教程一(Code First数据表不需再关心) CRL快速开发框架系列教程二(基于Lambda表达式查询) CRL快速开发框架系列教程三(更新数据) CRL快速开发框 ...
- 尝试asp.net mvc 基于controller action 方式权限控制方案可行性
微软在推出mvc框架不久,短短几年里,版本更新之快,真是大快人心,微软在这种优秀的框架上做了大量的精力投入,是值得赞同的,毕竟程序员驾驭在这种框架上,能够强力的精化代码,代码层次也更加优雅,扩展较为方 ...
- 编写自己的PHP MVC框架笔记
1.MVC MVC模式(Model-View-Controller)是软件工程中的一种软件架构模式,把软件系统分为三个基本部分:模型(Model).视图(View)和控制器(Controller). ...
- bzoj3207--Hash+主席树
题目大意: 给定一个n个数的序列和m个询问(n,m<=100000)和k,每个询问包含k+2个数字:l,r,b[1],b[2]...b[k],要求输出b[1]~b[k]在[l,r]中是否出现. ...
- BPM生产安全管理解决方案分享
一.方案概述生产安全管理是企业生产管理的重要组成部分,组织实施好企业安全管理规划.指导.检查和决策,保证生产处于最佳安全状态是安全管理的重要内容和职责.H3 BPM企业生产安全管理解决方案是一套专门为 ...
- 小程序用户反馈 - HotApp小程序统计仿微信聊天用户反馈组件,开源
用户反馈是小程序开发必要的一个功能,但是和自己核心业务没关系,主要是产品运营方便收集用户的对产品的反馈.HotApp推出了用户反馈的组件,方便大家直接集成使用 源码下载地址: https://gith ...
- 仿陌陌的ios客户端+服务端源码项目
软件功能:模仿陌陌客户端,功能很相似,注册.登陆.上传照片.浏览照片.浏览查找附近会员.关注.取消关注.聊天.语音和文字聊天,还有拼车和搭车的功能,支持微博分享和查找好友. 后台是php+mysql, ...
- 保护ASP.NET 应用免受 CSRF 攻击
CSRF是什么? CSRF(Cross-site request forgery),中文名称:跨站请求伪造,也被称为:one click attack/session riding,缩写为:CSRF/ ...