3

我正在使用动态数据显示来显示图形的 wpf 应用程序。它工作正常。

问题 :

请检查:

在此处输入图像描述

如何使用 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));
4

3 回答 3

1

要更改 DateTime 轴应用格式的方式,您必须进入 D3 的源代码。在文件中... DynamicDataDisplay/Charts/Axes/DateTime/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 小时制)。希望这会有所帮助,并祝您的图表项目的其余部分好运!

于 2012-11-09T15:25:33.690 回答
0

在这里您可以找到一个很好的使用示例:

http://msdn.microsoft.com/en-us/magazine/ff714591.aspx

我认为这可以帮助你:

在 x 轴上,我使用 ConvertToDouble 方法将 DateTime 数据显式转换为 double 类型。在 y 轴上,我简单地写了 y => y(读作“y 转到 y”)来隐式地将输入 int y 转换为输出 double y。我可以通过编写 SetYMapping(y => Convert.ToDouble(y) 来明确我的类型映射。我对 lambda 表达式参数的 x 和 y 选择是任意的——我可以使用任何参数名称。

和代码:

var datesDataSource = new EnumerableDataSource<DateTime>(dates);
datesDataSource.SetXMapping(x => dateAxis.ConvertToDouble(x));

动态数据显示将 DateTime 与您的应用程序文化结合使用。所以(如前所述weston)你必须将它设置为 cultere 12 hour time format。这篇文章解释了如何做到这一点:

如何在 WPF 应用程序中全局设置文化?

编码:

Thread.CurrentThread.CurrentCulture = new CultureInfo("en-US");
于 2012-06-15T11:13:25.217 回答
-1

试试这个:(c#,DevExpress)

((XYDiagram)chartControl.Diagram).AxisX.DateTimeOptions.Format = DateTimeFormat.Custom;
((XYDiagram)chartControl.Diagram).AxisX.DateTimeOptions.FormatString = "yyyy-MM-dd";
于 2012-10-31T09:27:23.993 回答