0

Silverlightの単純なMicrosoftチャートコントロールでは、X軸に日付として1か月の日があり、Y軸に2倍の値があります。X軸に1日おきに表示したいのですが、その日は奇数日である必要があります。

IntervalType="Days"とInterval="2"を設定すると、番号は常に2日目から始まります。ダミーの日付を前または最後、あるいはその両方に置いても。

代わりに:__ 02 __ 04 __ 06 __ 08 __10..。

必要なもの:01 __ 03 __ 05 __07..。

どうすればこれを最も簡単な方法で達成できますか?

4

1 に答える 1

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機能させるために、クラスを変更しましたDataTimeRangeAxis。SOのプログラマーは、長い説明のある答えなどの些細なことに注意を払わないため、これはpastebinのリンクです。

名前空間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 を使用することをお勧めします。

于 2011-03-07T18:24:08.893 に答える