Microsoft Silverlight绘制奇数间隔

时间:2011-03-07 09:11:38

标签: silverlight microsoft-chart-controls charts

在Silverlight中的一个简单的Microsoft图表控件中,我将一个月的日期作为X轴上的日期和Y轴上的双倍值。我想在X轴上每隔一天显示一次,但那些日子应该是奇数天

如果我设置IntervalType =“Days”和Interval =“2”,编号总是从第2天开始。即使我在前面或末尾或两者都放了一个虚拟日期。

而不是: __ 02 __ 04 __ 06 __ 08 __ 10 ...

我需要: 01 __ 03 __ 05 __ 07 ...

如何以最简单的方式实现这一目标?

1 个答案:

答案 0 :(得分:2)

集合31.01 -> 1.02 -> 3.02而不是31.01 -> 2.02的示例。在这种情况下,唯一的方法是编写与Axis类似的自定义DateTimeAxis

首先将以下文件复制到您的项目中:

  • c:\ Program Files \ Microsoft SDKs \ Silverlight \ v4.0 \ Toolkit \ Apr10 \ Source \ Source code.zip \ Controls.DataVisualization.Toolkit \ EnumerableFunctions.cs
  • c:\ Program Files \ Microsoft SDKs \ Silverlight \ v4.0 \ Toolkit \ Apr10 \ Source \ Source code.zip \ Controls.DataVisualization.Toolkit \ ValueHelper.cs

使用完全相同的命名空间复制这些文件,它们是内部的,因此不存在名称冲突。 接下来,添加DateTimeIntervalType的扩展类:

namespace System.Windows.Controls.DataVisualization.Charting
{
    /// <summary>
    /// A date time interval.
    /// </summary>
    public enum ExtendedDateTimeIntervalType
    {
        /// <summary>
        /// Automatically determine interval.
        /// </summary>
        Auto = 0,

        /// <summary>
        /// Interval type is milliseconds.
        /// </summary>
        Milliseconds = 1,

        /// <summary>
        /// Interval type is seconds.
        /// </summary>
        Seconds = 2,

        /// <summary>
        /// Interval type is minutes.
        /// </summary>
        Minutes = 3,

        /// <summary>
        /// Interval type is hours.
        /// </summary>
        Hours = 4,

        /// <summary>
        /// Interval type is days.
        /// </summary>
        Days = 5,

        /// <summary>
        /// Interval type is weeks.
        /// </summary>
        Weeks = 6,

        /// <summary>
        /// Interval type is months.
        /// </summary>
        Months = 7,

        /// <summary>
        /// Interval type is years.
        /// </summary>
        Years = 8,

        /// <summary>
        /// Interval type is odd days
        /// </summary>
        OddDays = 9
    }
}

要使新成员OddDays有效,我已更改了课程DataTimeRangeAxisHere is a link on pastebin,因为SO的程序员不会长时间解释这些小问题。

将命名空间SilverlightApplication3更改为您想要的任何内容(System.Windows.Controls.DataVisualization.Charting除外)。

此外,我在最后一个函数中评论了代码,因为它包含许多依赖项,我不想将额外的文件复制到应用程序中。没有此代码,轴工作正常,可能根本不使用此功能。

该课程最重要的部分是函数IncrementDateTime

        //The interval type forced by a user, not actual interval type
        if (this.IntervalType == ExtendedDateTimeIntervalType.OddDays)
        {
            DateTime newDate;
            if(span != TimeSpan.Zero) //automatically created interval
                newDate = date.Add(span);
            else newDate = date.AddDays(interval); //else use the interval which is set by a user

            //find the nearest odd day
            while (newDate.Day % 2 != 1)
                newDate = newDate.AddDays(1);
            //update span
            span = newDate - date;
        }

Xaml看起来如此:

        <charting:Chart.Axes>
            <local:DateTimeAxis IntervalType="OddDays" Orientation="X" Interval="1"/>
        </charting:Chart.Axes>

您可以设置Interval="2"而不是1,但它会跳过集31.01-1.02-3.02中的那一天,因此最好使用值1.