【问题标题】:Dynamic Data Display : Change X-Axis date time format for graph动态数据显示:更改图表的 X 轴日期时间格式
【发布时间】:2012-06-15 09:59:47
【问题描述】:

我正在使用 Dynamic Data Display 来显示 Graph 的 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));

【问题讨论】:

    标签: c# wpf dynamic-data-display


    【解决方案1】:

    要更改日期时间轴应用格式的方式,您必须进入 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 小时制)。希望这会有所帮助,并祝您的图表项目的其余部分好运!

    【讨论】:

      【解决方案2】:

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

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

      我认为这可以帮助你:

      在 x 轴上,我使用 ConvertToDouble 方法显式转换 DateTime 数据转换为 double 类型。在 y 轴上,我简单地写了 y => y (读作“y go to y”)将输入 int y 隐式转换为 输出双 y。我可以通过我的类型映射来明确 编写 SetYMapping(y => 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");
      

      【讨论】:

        【解决方案3】:

        试试这个:(c#, DevExpress)

        ((XYDiagram)chartControl.Diagram).AxisX.DateTimeOptions.Format = DateTimeFormat.Custom;
        ((XYDiagram)chartControl.Diagram).AxisX.DateTimeOptions.FormatString = "yyyy-MM-dd";
        

        【讨论】:

        • 问题是关于 D3 ChartPlotter,而不是 DevExpress.ChartControl
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-07-26
        • 2018-03-30
        • 1970-01-01
        • 1970-01-01
        • 2020-12-07
        相关资源
        最近更新 更多