找回密码
 立即注册

QQ登录

只需一步,快速开始

还没想好

论坛元老

5

主题

38

帖子

1万

积分

论坛元老

积分
14301

活字格认证

还没想好
论坛元老   /  发表于:2014-8-22 16:31  /   查看:17310  /  回复:21
我们在Gantt Chart 添加了最多6个series 但是每个series由多段组成 并且每段的高度不一样 总的组合起来就像6个单独的series 如下图 一个颜色就是一个series



我们想在Y轴旁边显示Itemnames 来表示这6段代表的机器地址。 但是我们把Itemnames绑定上去后 名字跟表里面的bar对不齐 并且Y轴会出现很多刻度。 我们猜想是不是有多少段series就会有多少个刻度 如下图


我们尝试过单独加6个很短但是完整的series上去 并显示它们的itemname 但是还是与上图一样的显示

请问可以单独调整itemname的位置吗?

本帖子中包含更多资源

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

x

21 个回复

倒序浏览
Alice
社区贡献组   /  发表于:2014-8-22 17:49:00
沙发
回复 1楼还没想好的帖子

你好,首先刻度和Series没有必然的一对一的关系。
另外,不知道你是如何添加Series和ItemName,所以不能判断具体问题所在。你能否将代码传上来,帮你分析下原因。
请点击评分,对我的服务做出评价!  5分为非常满意!

葡萄城控件服务团队

官方网站: http://www.gcpowertools.com.cn
回复 使用道具 举报
还没想好
论坛元老   /  发表于:2014-8-25 09:00:00
板凳
你好 我们是通过xaml绑定的方式来实现的
  1.   <c1c:C1Chart Name="GanttChartOverview" DockPanel.Dock="Top" Margin="4" ChartType="Gantt" MinHeight="400" MinWidth="400" Theme="Office2007Silver">
  2.                                                     <c1c:C1Chart.Data>
  3.                                                         <c1c:ChartData SeriesItemsSource="{Binding DataSeriesCollection}" ItemNames="{Binding StationPaAndLineStateNames}"><!--ItemNames=""-->
  4.                                                             <c1:ChartData.SeriesItemTemplate>
  5.                                                                 <DataTemplate>
  6.                                                                     <c1:HighLowSeries ItemsSource="{Binding}"
  7.                                                                                   HighValuesSource="{Binding StartTime}"
  8.                                                                                   LowValuesSource="{Binding EndTime}"
  9.                                                                                   Label="{Binding Label}"
  10.                                                                                   SymbolFill="{Binding SymbolFill}"
  11.                                                                                   XValuesSource="{Binding XValue}"
  12.                                                                                   Tag="{Binding Guid}"
  13.                                                                                   ToolTip="{Binding ToolTip}"
  14.                                                                                   SymbolSize="30,30"
  15.                                                                                   SymbolStroke="{Binding SymbolStroke}"         
  16.                                                                                       
  17.                                                                                   SymbolStrokeThickness="3"
  18.                                                                                   Margin="-4,-4,-4,-4"
  19.                                                                                   PlotElementLoaded="DataSeries_OnPlotElementLoaded"
  20.                                                                                   Uid="{Binding Tag}"
  21.                                                                                   PointLabelTemplate="{StaticResource lbl}"
  22.                                                                                   />
  23.                                                                     
  24.                                                                 </DataTemplate>
  25.                                                             </c1:ChartData.SeriesItemTemplate>
  26.                                                         </c1c:ChartData>
  27.                                                     </c1c:C1Chart.Data>
  28.                                                     <c1c:C1Chart.View >
  29.                                                         <c1c:ChartView >
  30.                                                             <c1c:ChartView.AxisY>
  31.                                                                 <c1c:Axis Visible="True" Min="0"/>
  32.                                                             </c1c:ChartView.AxisY>
  33.                                                             <c1c:ChartView.AxisX>
  34.                                                                 <c1c:Axis Min="{Binding SliderStartTime, Converter={StaticResource OADateConverter}}" Max="{Binding SliderEndTime, Converter={StaticResource OADateConverter}}"/>
  35.                                                             </c1c:ChartView.AxisX>
  36.                                                         </c1c:ChartView>
  37.                                                     </c1c:C1Chart.View>
复制代码


ViewModel:
  1.   /// <summary>
  2.         /// Gantt Chart Data in Series format.
  3.         /// </summary>
  4.         private ObservableCollection<GanttChartDataSeriesModel> _dataSeriesCollection =
  5.             new ObservableCollection<GanttChartDataSeriesModel>();
  6.         public ObservableCollection<GanttChartDataSeriesModel> DataSeriesCollection
  7.         {
  8.             get { return _dataSeriesCollection; }
  9.             set
  10.             {
  11.                 _dataSeriesCollection = value;
  12.                 OnPropertyChanged("DataSeriesCollection");
  13.             }
  14.         }
复制代码
回复 使用道具 举报
还没想好
论坛元老   /  发表于:2014-8-25 09:11:00
地板
我们想知道 itemnames的位置和series之间有什么关系 或者是跟绑定source有什么关系。。另外 跟Y有关系吗  我们可以添加一条Y轴来调整names的位置吗
回复 使用道具 举报
Alice
社区贡献组   /  发表于:2014-8-25 09:28:00
5#
回复 4楼还没想好的帖子

你好,之前在论坛的这个帖子里有详细的SeriesItemsSource绑定方法。你可以先参考下:http://gcdn.gcpowertools.com.cn/showtopic-13181.html
ItemNames是指series的名称,用此替代原来的0,1,2,3来显示。有关这个可以参考我们的博客:http://blog.gcpowertools.com.cn/ ... ustomize_title.aspx
请点击评分,对我的服务做出评价!  5分为非常满意!

葡萄城控件服务团队

官方网站: http://www.gcpowertools.com.cn
回复 使用道具 举报
还没想好
论坛元老   /  发表于:2014-8-25 10:36:00
6#
Hi Alice
我看了你的例子,但是我还是没有找到我想要的效果。 你所给的例子 每个series都在同一高度,在我的项目中,同一条series由不同高度的段组成。如果用6条同一高度的series我可以让他们名称与series对齐 但是在我的项目中series中段的高度是不同的。 如我图中所说  同一种颜色的所有段代表一条series  不同颜色的段是属于不同series的。 图中显示的第一条有很多颜色的bar实际上包含多条series的段。  所以itemnames就不知道该对齐哪一段了。

请问有没有方法 让Y轴旁边显示名称的位置与series无关
回复 使用道具 举报
Alice
社区贡献组   /  发表于:2014-8-25 17:31:00
7#
回复 6楼还没想好的帖子

你的需求我理解了。目前我做到了如下的程度,就是每个Series由不同的值组成,但同属于一个SeriesName。
我的Sample如下所示:



Y轴旁边可以显示不同的单位来衡量Y的数据,在安装WPF产品后,可以在如下路径得到WPF的C1Chart Demo。打开DependentAxes的文件,里面有详细代码。
链接:C:\Users\aliceyue\Documents\ComponentOne Samples\Studio for WPF\C1.WPF.Chart\CS\ChartSamples\Axes

我帮你再找找是否有更好的方法完成需求。你先看看如上的例子,能不能帮助你解决问题。有什么新的想法欢迎提出来,我随时跟进这个问题的进度。

本帖子中包含更多资源

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

x
请点击评分,对我的服务做出评价!  5分为非常满意!

葡萄城控件服务团队

官方网站: http://www.gcpowertools.com.cn
回复 使用道具 举报
还没想好
论坛元老   /  发表于:2014-8-26 09:16:00
8#
你好 谢谢你的demo 离我的问题很接近了  就是你能把你demo中第一个series的第二段(黄色) 移到第二个series的第二段(绿色)的位置并且让他们还是同属于一个seriesName 然后还是让 第一个seriesName的位置不变吗
我也在借着你的demo继续尝试下
谢谢了
回复 使用道具 举报
Alice
社区贡献组   /  发表于:2014-8-26 10:19:00
9#
回复 8楼还没想好的帖子

现在将demo中的第一个series的第二段移到别的位置,目前调整做到如下程度:
1.在Task类里添加double[]类型的 value字段,代码参考:
  1.    class Task
  2.     {
  3.         public double[] Value { get; set; }
  4.         public string Name { get; set; }
  5.         public DateTime[] Start { get; set; }
  6.         public DateTime[] End { get; set; }
  7.         public bool IsGroup { get; set; }

  8.         public Task(string name, DateTime[] start, DateTime[] end, bool isGroup, double[] value)
  9.         {
  10.             Name = name;
  11.             Start = start;
  12.             End = end;
  13.             IsGroup = isGroup;
  14.             Value = value;
  15.         }
  16.     }
复制代码

2.GetTasks方法修改,代码参考:
  1. Task[] GetTasks()
  2.         {
  3.             DateTime start = new DateTime(2008, 1, 1, 1, 0, 0);
  4.             DateTime end = new DateTime(2008, 1, 1, 3, 0, 0);
  5.             DateTime[] startAlpha = new DateTime[] { start, start.AddHours(3) };
  6.             DateTime[] endAlpha = new DateTime[] { end, end.AddHours(5) };
  7.             double[] valueAlpha = new double[] {0.1,0.16 };

  8.             DateTime[] startSpec = new DateTime[] { start.AddHours(1), start.AddHours(4) };
  9.             DateTime[] endSpec = new DateTime[] { end.AddHours(1), end.AddHours(6) };
  10.             double[] valueSpec = new double[] { 0.1, 0.2 };

  11.             DateTime[] startPrototype = new DateTime[] { start.AddHours(2), start.AddHours(5) };
  12.             DateTime[] endPrototype = new DateTime[] { end.AddHours(2), end.AddHours(8) };
  13.             double[] valuePrototype = new double[] { 0.2, 0.3 };
  14.             return new Task[]
  15.             {
  16.                  new Task(&quot;Alpha&quot;, startAlpha, endAlpha,true,valueAlpha),
  17.                  new Task(&quot;Spec&quot;, startSpec,endSpec,true,valueSpec),
  18.                  new Task(&quot;Prototype&quot;, startPrototype, endPrototype, false,valuePrototype),
  19.                          };
  20.         }
复制代码

3.在foreach的循环里添加如下代码进行值的绑定:
  1. ds.XValuesSource = task.Value;
复制代码

4.注销掉如下代码:
  1. //c1Chart1.Data.ItemNames = (from task in tasks select task.Name).ToArray();
复制代码
请点击评分,对我的服务做出评价!  5分为非常满意!

葡萄城控件服务团队

官方网站: http://www.gcpowertools.com.cn
回复 使用道具 举报
还没想好
论坛元老   /  发表于:2014-8-26 15:27:00
10#
回复 9楼Alice的帖子

Hi Alice
谢谢你的demo
通过你的代码 已经做到series不同的高度 目前的问题就是  怎么在Y轴旁边加上你上个demo所显示的 itemnames:Alpha  Spec ProtoType  并使这3个names对齐table中的series 如下图所示




再次谢谢你的耐心回答

本帖子中包含更多资源

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

x
回复 使用道具 举报
123下一页
您需要登录后才可以回帖 登录 | 立即注册
返回顶部