我正在使用wpf应用程序,我正在使用Dynamic Data Display来显示Graph。它工作正常。
问题:
请检查一下:
如何使用12小时时间格式而不是24小时?请建议。
更新:
这是我的XAML图表:
<d3:ChartPlotter Name="plotter" Margin="3,121,5,0" Grid.RowSpan="2" Height="373" VerticalAlignment="Top" VerticalContentAlignment="Stretch" LegendVisible="False">
<d3:ChartPlotter.HorizontalAxis>
<d3:HorizontalDateTimeAxis Name="dateAxis" />
</d3:ChartPlotter.HorizontalAxis>
<d3:VerticalAxisTitle FontFamily="Georgia" Content="Sensor Readings" />
<d3:HorizontalAxisTitle FontFamily="Georgia" Content="Date" />
</d3:ChartPlotter>
CS:
var dates = (from dr in datDs.Tables[0].AsEnumerable()
select new
{
date = dr.Field<DateTime>("DateRecorded")
}.date).ToList();
var datesDataSource = new EnumerableDataSource<DateTime>(dates);
datesDataSource.SetXMapping(x => dateAxis.ConvertToDouble(x));
答案 0 :(得分:1)
要更改DateTime Axis应用格式的方式,您必须进入D3的源代码。在文件中...... DynamicDataDisplay /图表/轴/日期时间/ DateTimeLabelProviderBase.cs
您必须更改GetDateFormat方法。以下是产生所需结果的示例:
protected virtual string GetDateFormat(DifferenceIn diff)
{
string format = null;
switch (diff)
{
case DifferenceIn.Year:
format = "yyyy";
break;
case DifferenceIn.Month:
format = "MMM";
break;
case DifferenceIn.Day:
format = "%d";
break;
case DifferenceIn.Hour:
format = "hh:mm";
break;
case DifferenceIn.Minute:
format = "%m";
break;
case DifferenceIn.Second:
format = "ss";
break;
case DifferenceIn.Millisecond:
format = "fff";
break;
default:
break;
}
return format;
}
关键是将小时的情况从大写字母H(24小时制)改为小写字母h(12小时制)。希望这会有所帮助,并祝你的其他图表项目好运!
答案 1 :(得分:0)
在这里您可以找到一个很好的用法示例:
http://msdn.microsoft.com/en-us/magazine/ff714591.aspx
我认为这可以帮到你:
在x轴上,我使用ConvertToDouble方法显式转换 将DateTime数据转换为double类型。在y轴上,我只写了y =&gt; ÿ (读作“y转到y”)隐式地将输入转换为 输出双y。我可以通过我的类型映射明确表示 写SetYMapping(y =&gt; Convert.ToDouble(y)。我选择x和y 对于lambda表达式的参数是任意的 - 我可以 使用了任何参数名称。
代码:
var datesDataSource = new EnumerableDataSource<DateTime>(dates);
datesDataSource.SetXMapping(x => dateAxis.ConvertToDouble(x));
动态数据显示将DateTime与您的应用程序文化结合使用。所以(正如weston
所述)你必须将其设置为12 hour time format
的罪魁祸首。本文介绍了如何执行此操作:
How can i globally set the Culture in a WPF Application?
代码:
Thread.CurrentThread.CurrentCulture = new CultureInfo("en-US");
答案 2 :(得分:-1)
试试这个:(c#,DevExpress)
((XYDiagram)chartControl.Diagram).AxisX.DateTimeOptions.Format = DateTimeFormat.Custom;
((XYDiagram)chartControl.Diagram).AxisX.DateTimeOptions.FormatString = "yyyy-MM-dd";