集合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
工作,我改变了班级DataTimeRangeAxis
。这是 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,但它会跳过 set 中的一天31.01-1.02-3.02
,因此最好使用值 1。