WPF Devexpress控件库中ChartControl--实现不等距x轴
一、概要
解决问题--ChartControl不等距x轴显示
二、CS代码
用过ChartControl的开发者们应该都知道,ChartControl中设置x轴间距间隔都是固定的数值。
比如(间隔1000)数值为:
0 1000 2000 3000 4000
<dxc:AxisY2D.WholeRange>
<dxc:Range
MaxValue="0"
MinValue="4000"
SideMarginsValue="0" />
</dxc:AxisY2D.WholeRange>
但是,当ChartControl中的某一条数值很小例如值为3,如果不转换的话几乎在控件中看不到用户体验非常不好,解决方案就是实现不等距x轴来显示。
间隔数值可以按照自己的想法来,本文章的数值为:
0 10 100 1000 4000
如果数值设置为不等距,当ChartControl中的某一条数值很小例如值为3的时候,这时候3的数值就可以在0到10这个区间完美显示如图【图a-1】
理想是美好的,那么问题来了,控件实际的间距是固定值1000 而显示间距是0到10这时候怎么转换有人会想0到10的这个域中的值乘以100不就可以满足情况了吗。
是的,这样做可以。但是这个做法非常不科学,因为后面的三个域中的值倍数就不能这么算了。
这时候怎么解决呢?需要用到高中的数学知识分段函数。
公式如下:
附加值:(总长度*当前段数 / 段数) 第一段附加值为0
((实际值 - 域下限) / (域上限 - 域下限))*(总长度 / 段数)+ 附加值
到这里为止,可能只能大概知道这个公式是个什么情况,但是还是不知道具体为什么要这么算。我们接下来在代码中深入了解。
三、xaml代码
1.修改ChartControl x轴的显示数值(转换)
<local:UpAndDownLabelConverter x:Key="xconv" />
<DataTemplate x:Key="AxisYLabelTemplate">
<ContentPresenter Content="{Binding Path=Content, Converter={StaticResource xconv}}" />
</DataTemplate>
<dxc:AxisY2D.Label>
<dxc:AxisLabel
ElementTemplate="{StaticResource AxisYLabelTemplate}"
Visibility="Visible"
Visible="True">
<dxc:Axis2D.ResolveOverlappingOptions>
<dxc:AxisLabelResolveOverlappingOptions AllowHide="False" />
</dxc:Axis2D.ResolveOverlappingOptions>
</dxc:AxisLabel>
</dxc:AxisY2D.Label>
四、算法
/// <summary>
/// 推算出显示值
/// </summary>
/// <param name="xValue">X轴数值</param>
/// <param name="minRange">域下限</param>
/// <param name="maxRange">域上限</param>
/// <param name="totalLength">总长度</param>
/// <param name="period">分了几段</param>
/// <returns></returns>
private static double RangeCalculate(double xValue, double minRange, double maxRange,double totalLength = 4000.0,int period = )
{
//实际值 需要转化的实际值
//域上限 0-10 ,10为上限
//域下限 0-10 ,0为下限
//总长度=X轴的上限。例:0 10 100 1000 4000,4000为总长度
//段数:分了几段 例:0-10,10-100,100-1000,1000-4000 分为4段
//当前段数:0-10 第1段 , 10-100 第2段 , 100-1000第3段 ,1000-4000第4段
//段附加值:(总长度 * 当前段数 / 段数) ps:第一段,段附加值为0。附加值是为了值平均
//分段函数公式:((实际值 - 域下限) / (域上限 - 域下限))*(总长度 / 段数)+ 段附加值 double x = 0.0; if ( < xValue && xValue <= )
{
x = ((xValue - minRange) / (maxRange - minRange)) * (totalLength / period) + ;
}
if ( < xValue && xValue <= )
{
x = ((xValue - minRange) / (maxRange - minRange)) * (totalLength / period) + (totalLength * / period);
}
if ( < xValue && xValue <= )
{
x = ((xValue - minRange) / (maxRange - minRange)) * (totalLength / period) + (totalLength * / period);
}
if ( < xValue && xValue <= )
{
x = ((xValue - minRange) / (maxRange - minRange)) * (totalLength / period) + (totalLength * / period);
}
return x;
}
五、Convert
public class NotEquidistantLabelConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
int target = ; int.TryParse(value.ToString(), out target); if (target <= )
return ;
else if (target <= )
return ;
else if (target <= )
return ;
else if (target <= )
return ;
else if (target <= )
return ;
return string.Empty;
} public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
}
- E-Mail:zhuzhen723723@outlook.com
- QQ: 580749909(个人群)
- Blog: https://www.cnblogs.com/justzhuzhu/
- Git: https://github.com/JusterZhu
- 微信公众号
WPF Devexpress控件库中ChartControl--实现不等距x轴的更多相关文章
- WPF Devexpress 控件库中ChartControl 实现股票分时走势图
概要 从事金融行业开发 ,会接触些图表控件,这里我分享一下自己基于DevExpress.Charts.v16.2开发的股票分时走势图的经验. 附上源码:点击跳转 如果需要讨论,Q群:580749909 ...
- DevExpress控件库 开发使用经验总结3 制作项目安装包
2015-01-27 使用DevExpress控件包开发C/S项目完成后,部署前需要制作本地安装包.本文还是使用“SetupFactory”安装工厂来制作安装包.在以前的系列文章中详细介绍过该工具的使 ...
- WindowsXamlHost:在 WPF 中使用 UWP 控件库中的控件
在 WindowsXamlHost:在 WPF 中使用 UWP 的控件(Windows Community Toolkit) 一文中,我们说到了在 WPF 中引入简单的 UWP 控件以及相关的注意事项 ...
- DevExpress控件库 开发使用经验总结1 DevExpress简介、安装、使用
2015-01-24 最近公司开发的WinForm客户端图书行业ERP管理系统,界面端采用了DevExpress控件库.界面效果非常绚丽,类似于Office2007.2010的界面风格. 其中的控件功 ...
- Winform DevExpress控件库(一) DevExpress控件库的安装与新建第一个DevExpress项目
前言:因为这段时间要接触到DevExpress控件库,而我本身甚至对winform的控件都了解甚少,所以处在学习中,写下博客主要是为了方便后期的回顾,当然也可以给一些新人第一次接触时做为学习的参考,以 ...
- DevExpress控件库 开发使用经验总结2 DevExpress汉化之WinForm开发模式汉化
2015-01-24 DevExpress控件库默认安装后,使用的本地资源为英文.Developer Express .NET产品都有本地化资源,比如按钮属性,控件属性描述,菜单项,确认和错误的信息等 ...
- DevExpress控件GridControl中的布局详解 【转】
DevExpress控件GridControl中的布局详解 [转] 2012-10-24 13:27:28| 分类: devexpress | 标签:devexpress |举报|字号 订阅 ...
- WPF 免费控件库
https://github.com/Infragistics/InfragisticsThemesForMicrosoftControls 几款WPF免费控件库,不过运行源码时需要下载三个DLL , ...
- C# WPF开源控件库:MahApps.Metro
其实站长很久之前就知道这个开源WPF控件库了,只是一直欣赏不了这种风格,但也star了该项目.每次浏览该仓库时,发现star越来越多,也看到很多网友对它的褒奖,所以今天就向大家推荐这款WPF控件库. ...
随机推荐
- 4.24 省选模拟赛 欧珀瑞特 主席树 可持久化trie树
很容易的一道题目.大概.不过我空间计算失误MLE了 我草草的计算了一下没想到GG了. 关键的是 我学了一个dalao的空间回收的方法 但是弄巧成拙了. 题目没有明确指出 在任意时刻数组长度为有限制什么 ...
- Django自学教程PDF高清电子书百度云网盘免费领取
点击获取提取码:x3di 你一定可以学会,Django 很简单! <Django自学教程>的作者学习了全部的 Django英文的官方文档,觉得国内比较好的Django学习资源不多,所以决定 ...
- Php7+Mysql8实现简单的网页聊天室功能
php聊天室 前端页面 chat_room.html <!DOCTYPE html> <html lang="en"> <head> & ...
- 银弹谷V百科|使用技巧:Vbase技巧二则之一
银弹谷零代码开发V平台提供访问窗体的短地址链接 格式:http://IP:port/form/componentCode/windowCode 例子: 默认地址:http://IP:port/mod ...
- Docker之Ubuntu上使用Docker的简易教程
Ubuntu上使用Docker的简易教程 原始文档:https://www.yuque.com/lart/linux/fp6cla 说在开头 在天池的比赛中涉及到了docker的使用.经过多番探究,大 ...
- python3.6项目:银行存取款系统
card1 ="1001"#卡号pwd1="1001"#密码ban1=10000#余额card2 ="1002"pwd2="100 ...
- 用var声明变量,在java中居然有这么多细节,你都了解么?
简介 Java SE 10引入了局部变量的类型推断.早先,所有的局部变量声明都要在左侧声明明确类型. 使用类型推断,一些显式类型可以替换为具有初始化值的局部变量保留类型var,这种作为局部变量类型 的 ...
- 有哪些开源的 Python 库让你相见恨晚?
Arrow 我们知道 Python 已经内置了好几个处理时间相关的库,但是对于时间以及时区间的转换并不清晰,操作起来略繁琐,而 Arrow 可以弥补这个问题,它提供了更友好的方法,方便我们对时间,日期 ...
- Kubeflow实战: 入门介绍与部署实践
更多内容关注专辑: 机器学习实战 1 介绍 Kubeflow是在k8s平台之上针对机器学习的开发.训练.优化.部署.管理的工具集合,内部集成的方式融合机器学习中的很多领域的开源项目,比如Jupyter ...
- C#LeetCode刷题之#104-二叉树的最大深度(Maximum Depth of Binary Tree)
问题 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/4072 访问. 给定一个二叉树,找出其最大深度. 二叉树的深度为根 ...