2012-10-17 53 views
4

我正在嘗試繪製股票價格圖表的燭臺圖標。我在交易日的每一分鐘都有一個標記 - 上午9:30到下午4:00。我不想在每個交易日的4:01 PM至9:29 AM顯示空白空間。有沒有一種方法可以將我的X軸上的時間從我的圖表上移除?我希望所有的數據看起來都是連續不斷的流動。我使用我創建的TickToDateTimeLabelProvider爲我的X軸使用NumericAxis。有沒有辦法改變LabelProvider以適應我的需求?還是比這更深?動態數據顯示分散日期時間軸

這裏是我的LabelProvider代碼:

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Windows; 
using System.Windows.Controls; 

namespace Microsoft.Research.DynamicDataDisplay.Charts { 
public class TickToDateTimeLabelProvider : NumericLabelProviderBase { 
    public override UIElement[] CreateLabels(ITicksInfo<double> ticksInfo) { 
     var res = new TextBlock[ticksInfo.Ticks.Length]; 
     for (int i = 0; i < ticksInfo.Ticks.Length; ++i) { 
      long l = (long)ticksInfo.Ticks[i]; 
      if (l < 0) 
       l = 0; 
      DateTime dt = new DateTime(l); 
      res[i] = new TextBlock(); 
      res[i].Text = dt.ToString(); 
     } 
     return res; 
    } 
} 
} 

回答

2

解決了這一個,最後我讓我的X映射,該數據是在集合中的位置,然後又做了新的標籤供應商改變進入我想要的日期時間的位置。我的新標籤供應商看起來是這樣的:

using System; 
using System.ComponentModel; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Windows; 
using System.Windows.Controls; 
using Microsoft.Research.DynamicDataDisplay.Charts.Axes; 
using System.Globalization; 


namespace Microsoft.Research.DynamicDataDisplay.Charts { 

public class TradingLabelProvider : NumericLabelProviderBase { 

    private List<DateTime> m_Labels; 
    public List<DateTime> Labels { 
     get { return m_Labels; } 
     set { m_Labels = value; } 
    } 

    public TradingLabelProvider(DateTime start, List<DateTime> labels) {          
     Labels = labels;          
    } 

    public override UIElement[] CreateLabels(ITicksInfo<double> ticksInfo) {    

     var ticks = ticksInfo.Ticks; 
     Init(ticks);    

     UIElement[] res = new UIElement[ticks.Length]; 
     LabelTickInfo<double> tickInfo = new LabelTickInfo<double> { Info = ticksInfo.Info }; 
     for (int i = 0; i < res.Length; i++) { 
      tickInfo.Tick = ticks[i]; 
      tickInfo.Index = i; 
      string labelText = ""; 

      if(Convert.ToInt32(tickInfo.Tick) <= Labels.Count && tickInfo.Tick >= 0) { 
       labelText = Labels[Convert.ToInt32(tickInfo.Tick)].ToString(); 
      } 

      TextBlock label = (TextBlock)GetResourceFromPool(); 
      if (label == null) { 
       label = new TextBlock(); 
      } 

      label.Text = labelText; 
      label.ToolTip = ticks[i].ToString(); 

      res[i] = label; 

      ApplyCustomView(tickInfo, label); 
     } 
     return res; 
    } 
} 
} 

這讓我串在一起的日子沒有空格在它們之間,以滿足我的要求。我掙扎着試圖用DateTimeAxis來做這件事,但沒有結果。

+0

請給我們一個例子如何使用這個類?特別是我無法處理CreateLabels方法 –