2011-03-07 5 views
0

Silverlight의 간단한 Microsoft 차트 컨트롤에서 X 축의 날짜와 Y 축의 이중 값으로 1 개월을 사용합니다. X 축에 두 번째 날을 표시하고 싶지만 요일은 인 이어야합니다.Microsoft Silverlight 차트 홀수 간격

IntervalType = "Days"및 Interval = "2"로 설정하면 번호 매기기는 항상 2 일로 시작됩니다. 더미 날짜를 앞이나 뒤에 넣거나 양쪽 모두에 넣어도.

대신 : __ 04 __ 06 __ 08 __ 10 02 __ ...

I이 필요합니다 01 __ 03 __ 05 __ 07 ...

어떻게이 이것을 달성 할 수 가장 간단한 방법?

+0

툴킷의 차트를 참조하고 있습니까? – AnthonyWJones

답변

2

31.01 -> 2.02 대신 31.01 -> 1.02 -> 3.02 세트의 예제. 이 경우에만 DateTimeAxis과 유사한 맞춤 Axis을 작성하는 것이 유일한 방법입니다. 프로젝트에 첫 번째 복사본 다음 파일에서

:

  • C : \ 프로그램 파일 \은 Microsoft SDKs \ 실버 \ 4.0의 \ 툴킷 \ Apr10 \ 소스 \ 소스 code.zip \ Controls.DataVisualization. 툴킷 \의 EnumerableFunctions.cs
  • C : \ 프로그램 파일 \은 Microsoft SDKs \ 실버 \ 4.0 \ 툴킷 \ Apr10 \ 소스 \ 소스 code.zip \ Controls.DataVisualization.Toolkit \ ValueHelper.cs

복사 정확히 동일한 네임 스페이스를 가진이 파일들은 내부적이므로 이름이 없습니다 confli ct. 다음, 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 작업을하려면, I 클래스 DataTimeRangeAxis을 변경했습니다. Here is a link on pastebin, SO의 프로그래머는 긴 설명이있는 대답과 같은 사소한 것에 관심을 기울이지 않기 때문에.

SilverlightApplication3을 원하는대로 변경하십시오 (System.Windows.Controls.DataVisualization.Charting 제외).

또한 많은 함수가 포함되어 있고 추가 파일을 응용 프로그램에 복사하지 않기 때문에 마지막 함수에서 코드에 주석을 달았습니다. 축이이 코드없이 잘 작동합니다. 아마도이 함수는 전혀 사용되지 않습니다.

 //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"을 설정할 수 있지만 하루 건너 뜁니다

클래스의 가장 중요한 부분은 기능 IncrementDateTime에 세트 31.01-1.02-3.02에 있으므로 값 1을 사용하는 것이 더 좋습니다.

+0

vorrtex 주셔서 감사합니다. 그러면이 솔루션을 살펴볼 것입니다. 어쩌면 커스텀 축 구현을 "요구할"것입니다. – Germstorm

+0

@Germstorm 제 대답을 편집했습니다. pastebin의 링크는 영원히 보관되어야하므로 모든 파일을 가져 와서 컴파일 할 수 있습니다. – vorrtex

관련 문제