找回密码
 立即注册

QQ登录

只需一步,快速开始

ljf31

中级会员

31

主题

88

帖子

651

积分

中级会员

积分
651

活字格认证

ljf31
中级会员   /  发表于:2015-3-9 17:57  /   查看:7518  /  回复:5
在一个图形中有俩个系列的柱状图,如果我设置了显示柱子宽度,当页面的宽度变化到一定程度后会使俩个系列中间有一定的空白区域,如下图所示。我现在想实现的是在设定柱子宽度情况下,不管页面怎样变化,俩个柱子都能够紧挨着。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x

5 个回复

倒序浏览
Alice
社区贡献组   /  发表于:2015-3-10 11:56:00
沙发
回复 1楼ljf31的帖子

对你提供的工程进行测试,没有重现该问题。
测试步骤:
1.运行程序。
2.在运行时鼠标拖拽网页对宽度进行调整。
3.最大化网页。
未出现空白的现象。
测试版本:2014V3.
请点击评分,对我的服务做出评价!  5分为非常满意!

葡萄城控件服务团队

官方网站: http://www.gcpowertools.com.cn
回复 使用道具 举报
ljf31
中级会员   /  发表于:2015-3-10 18:01:00
板凳
回复 2楼Alice的帖子

我上面的图就是程序运行的结果。我不清楚你电脑的分辨率是多少,我这边是1366*768。如果还是不出现的话,请删除每个系列中的俩个点数据项,完了全屏展示,肯定会出现。
之所以会出现俩个柱子之间的空白,是因为图形在加载的时候会根据实际的宽度自动计算出显示柱子的宽度A,如果A的宽度比我指定显示柱子宽度B大,这样柱子俩边就会出现宽度为(A-B)/2的空白。
以上的内容不知道我有没有描述清楚。
回复 使用道具 举报
Alice
社区贡献组   /  发表于:2015-3-11 10:00:00
地板
回复 3楼ljf31的帖子

C1Chart的柱宽和位置都是有一套算法逻辑自动计算的。默认的柱状图的各个柱子宽度,是动态适配的:即如果有1个柱子,则很粗,有5个柱子则变细了, 这样有一个好处是对开发者而言不用关心太多细节。
我看你示例中用事件改变了柱宽,这个值有可能比自动计算出来的大或是小。这就需要你根据需求自己写代码改变位置,使得中间不重叠或是不留白。
你可以检查下自己重置位置的代码逻辑,另外请注意在换算过程中的误差。
请点击评分,对我的服务做出评价!  5分为非常满意!

葡萄城控件服务团队

官方网站: http://www.gcpowertools.com.cn
回复 使用道具 举报
ljf31
中级会员   /  发表于:2015-3-17 11:26:00
5#
回复 4楼Alice的帖子

版主,你好。按照理论计算出的值,应该显示时俩个柱子是紧挨的,但实际出来的结果始终会有一个空白的区域。你能不能按照你们控件中的算法给做一个简单的例程序呢?
回复 使用道具 举报
Alice
社区贡献组   /  发表于:2015-3-17 14:38:00
6#
回复 5楼ljf31的帖子

我理解的是你需要更改柱子的宽度,并且设置柱子的位置(这是个动态计算的值)。
这里面涉及到动态计算位置的算法,这点需要你根据你的需求去完成,开发的原始的代码很庞大而且我也拿不到。所以很抱歉我无法提供示例程序。

不过我们的博客有详细讲解如何设置柱宽,链接如下:
C1Chart用PlotElementLoaded事件实现柱子宽度自定义

另外使用RenderTransform就可以改变柱子的位置。举例来说,如下代码可以将柱子往右调整10.
  1. bar.RenderTransform = new TranslateTransform() { X = 10};
复制代码


可以通过bar.ActualWidth获取到自动计算到的柱子宽度。bar.ActualWidth和bar.Width的差值即使柱子图表宽度变大时候需要移动的位置。利用RenderTransform调整位置即可。

值得指出的是,在固定柱子宽度后,每次Resize操作都会改变柱子之间的距离,你需要根据具体有几个serise以及每个serise是否不同去判断是不是有些series需要移动,有些不需要移动,以及移动的方向。
请点击评分,对我的服务做出评价!  5分为非常满意!

葡萄城控件服务团队

官方网站: http://www.gcpowertools.com.cn
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部