一、前言

      本月正好做一些关于工程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的使用的更多相关文章

  1. WPF DEV控件-ChartControl用法

    WPF常用的第三方控件集,DevExpress 下面介绍如何生成Chart界面: <dxc:ChartControl AnimationMode="OnDataChanged" ...

  2. WPF DevExpress ChartControl用法

    WPF常用的第三方控件集,DevExpress中ChartControl的使用 下面介绍如何生成Chart界面: <dxc:ChartControl AnimationMode="On ...

  3. WPF DevExpress ChartControl使用之XYDiagram

    WPF使用Dev和WinForm有许多不同,相对而言,WPF要更简单和炫酷一点,我只做了一点基本的功能,没有仔细的研究,这里只介绍一下WPF Dev ChartControl绘制XYDiagram的基 ...

  4. WPF DEV dxc:ChartControl 柱状图

    先上效果图: <UserControl xmlns:dxc="http://schemas.devexpress.com/winfx/2008/xaml/charts" mc ...

  5. WPF DevExpress ChartControl使用之PieChart

    饼状图要比XYDiagram要简单一点,大体上也是那些东西,没有了X.Y坐标轴,也就没有了第二坐标,要简单一点.PieChartControl.xaml <UserControl x:Class ...

  6. WPF Devexpress 控件库中ChartControl 实现股票分时走势图

    概要 从事金融行业开发 ,会接触些图表控件,这里我分享一下自己基于DevExpress.Charts.v16.2开发的股票分时走势图的经验. 附上源码:点击跳转 如果需要讨论,Q群:580749909 ...

  7. WPF Devexpress ChartControl CrosshairLabel显示内容居右

    源码可加Q群:580749909. 一.解决的问题 ChartControl中希望CrosshairLabel的内容据右 or 自定义 二.实现. 多个显示实例(实例:条形,线形,点等等)下的内容设置 ...

  8. [WPF系列]从基础起步学习系列计划

    引言 WPF技术已经算不什么新技术,一搜一大把关于WPF基础甚至高级的内容.之前工作中一直使用winform所以一直没有深入学习WPF,这次因项目中使用了WPF技术来实现比较酷的展示界面.我在这里只是 ...

  9. Devexpress系列一 之 ChartControl 柱形图BarSideBySideSeries2D

    这一篇是讲的是简单的柱形图, 柱形图运行效果如下图: 新建WPF窗体应用程序后(WPF用户控件也可以),工程引用DevExpress.Xpf.Charts.v17.1.dll, 在XAML头部引用名称 ...

随机推荐

  1. lua 学习笔记(1)

    一.lua函数赋值与函数调用         在lua中函数名也是作为一种变量出现的,即函数和所有其他值一样都是匿名的,当要使用某个函数时,需要将该函数赋值给一个变量,这样在函数块的其他地方就可以通过 ...

  2. 如何避免git每次提交都输入密码

    在ubuntu系统中,如何避免git每次提交都输入用户名和密码?操作步聚如下:1: cd 回车: 进入当前用户目录下:2: vim .git-credentials (如果没有安装vim 用其它编辑器 ...

  3. 微框架spark--api开发利器

    spark简介 Spark(注意不要同Apache Spark混淆)的设计初衷是,可以简单容易地创建REST API或Web应用程序.它是一个灵活.简洁的框架,大小只有1MB.Spark允许用户自己选 ...

  4. Velocity笔记--使用Velocity获取动态Web项目名的问题

    以前使用jsp开发的时候,可以通过request很轻松的获取到根项目名,现在换到使用velocity渲染视图,因为已经不依赖servlet,request等一些类的环境,而Web项目的根项目名又不是写 ...

  5. 破解SQLServer for Linux预览版的3.5GB内存限制 (UBUNTU篇)

    在上一篇中我提到了如何破解RHEL上SQLServer的内存大小限制,但是Ubuntu上还有一道检查 这篇我将会讲解如何在3.5GB以下内存的Ubuntu中安装和运行SQLServer for Lin ...

  6. DirectX Graphics Infrastructure(DXGI):最佳范例 学习笔记

    今天要学习的这篇文章写的算是比较早的了,大概在DX11时代就写好了,当时龙书11版看得很潦草,并没有注意这篇文章,现在看12,觉得是跳不过去的一篇文章,地址如下: https://msdn.micro ...

  7. 「译」JUnit 5 系列:环境搭建

    原文地址:http://blog.codefx.org/libraries/junit-5-setup/ 原文日期:15, Feb, 2016 译文首发:Linesh 的博客:环境搭建 我的 Gith ...

  8. 基于SOA架构的TDD测试驱动开发模式

    以需求用例为基,Case&Coding两条线并行,服务(M)&消费(VC)分离,单元.接口.功能.集成四层质量管理,自动化集成.测试.交付全程支持. 3个大阶段(需求分析阶段.研发准备 ...

  9. jQuery中取消后续执行内容

    <html xmlns="http://www.w3.org/1999/xhtml"><head>    <title></title&g ...

  10. weinre- 调试移动端页面

    相信很多前端的小伙伴一定会遇到一个问题, 比如我编写完一个页面,某个地方需要进行调整细节或者是哪个地方怎么调整都不对,在pc端还好,有google,firefox之类可以调节页面的工具,虽说这些工具有 ...