2015-09-07 61 views
11

此刻我有一個日期時間軸,日期與點一致,是否有這個日期顯示在中心,如條形圖中。Axis標籤在DateTimeAxis中的定位

Chart Img

<Style x:Key="DateTimeAxisLabelStyle2" TargetType="chartingToolkit:DateTimeAxisLabel"> 
    <Setter Property="DaysIntervalStringFormat" Value="{}{0:dd-MMM}" /> 
    <Setter Property="HoursIntervalStringFormat" Value="{}{0:hh:mm tt}" /> 
    <!--<Setter Property="RenderTransformOrigin" Value="1,0.5" /> 
    <Setter Property="RenderTransform"> 
     <Setter.Value> 
      <RotateTransform Angle="-45" /> 
     </Setter.Value> 
    </Setter>--> 
    <!--<Setter Property="Margin" Value="30,0,-10,0" />--> 
</Style> 

<chartingToolkit:DateTimeAxis IntervalType="Days" 
           Interval="1" 
           Minimum="{Binding StartDate}" 
           Maximum="{Binding EndDate}" 
           Orientation="X" 
           VerticalContentAlignment="Center" 
           Title="Day" 
           AxisLabelStyle="{StaticResource DateTimeAxisLabelStyle2}" /> 

任何幫助將不勝感激。

+0

你提的問題不夠清楚,要在X顯示在每兩個連續的點之間(除了每個圖表點的日期之間)軸的日期? – Usama

+0

我只是想沿x軸移動標籤(到中心),這可以通過使用邊距來實現,但x軸是動態的,因此使用硬編碼邊距是不可行的。圖表上的所有其他數據應該保持不變。 – Chris

+0

沒有代碼,圖表itemsSource通過sp引入,您期望看到什麼? – Chris

回答

0

以下是我使用WPF Toolkit Source作參考。

我創建了一個派生自DateTimeAxis的自定義類,然後覆蓋了「GetPlotAreaCoordinate」方法。 DateTimeAxis.Render()使用相同的「DateTime」值列表對該方法進行三次調用,一次用於MajorTickmarks,一次用於MinorTickmarks,一次用於日期標籤。列表中沒有小標記,因此該方法實際上只被調用兩次。我只保留已經評估過的值的列表,並假設它在列表中已經完成了標記並且正在執行標籤。

class CustomDateTimeAxis : DateTimeAxis 
{ 
    List<object> _valueList = new List<object>(); 
    UnitValue prevBaseValue; 

    protected override UnitValue GetPlotAreaCoordinate(object value, Range<IComparable> currentRange, double length) 
    { 

     _valueList.Add(value); 
     UnitValue baseValue = base.GetPlotAreaCoordinate(value, currentRange, length); 


     int valueCount = _valueList.Count((x) => x.Equals(value)); 
     if (valueCount == 2)      
      return new UnitValue(baseValue.Value + 27, baseValue.Unit); 

     prevBaseValue = baseValue; 
     return baseValue; 

    } 

    protected override void Render(Size availableSize) 
    { 
     base.Render(availableSize); 
     _valueList.Clear(); 
    } 

} 

「27」只是我試過的一個數字。你可能想玩一下,看看最適合你的是什麼。

return new UnitValue(baseValue.Value + 27, baseValue.Unit); 
+0

這似乎只是將像素長度添加到可以通過在xaml中使用實現的標籤,無論如何,無論調整大小還是數據環境,都要保證「27」值位於中心位置? – Chris

3

這裏就是我的了:

XAML:

<Window.Resources> 
    <Style x:Key="DateTimeAxisLabelStyle1" TargetType="{x:Type chartingToolkit:DateTimeAxisLabel}"> 
     <Setter Property="DaysIntervalStringFormat" Value="{}{0:dd-MMM}"></Setter> 
     <Setter Property="RenderTransformOrigin" Value="0.80,0.20"></Setter> 
     <Setter Property="RenderTransform"> 
      <Setter.Value> 
       <RotateTransform Angle="-90"></RotateTransform> 
      </Setter.Value> 
     </Setter> 
    </Style> 
</Window.Resources> 
<Grid> 
    <chartingToolkit:Chart Margin="0" Title="Chart Title"> 
     <chartingToolkit:Chart.DataContext> 
      <local:MyDataCollection/> 
     </chartingToolkit:Chart.DataContext> 
     <chartingToolkit:Chart.Axes> 
      <chartingToolkit:DateTimeAxis Minimum="{Binding StartDate}" Maximum="{Binding EndDate}" Orientation="X" ShowGridLines="True" AxisLabelStyle="{DynamicResource DateTimeAxisLabelStyle1}"/> 
     </chartingToolkit:Chart.Axes> 
     <chartingToolkit:LineSeries DependentValuePath="Y" IndependentValuePath="X" ItemsSource="{Binding}"/> 
    </chartingToolkit:Chart> 
</Grid> 

圖:

enter image description here

+0

嗨,欣賞答案,但這並不能解決圖表可以調整大小或數據上下文可能更大的問題請參閱:[鏈接](https://gyazo.com/e5dd61efb2d74713876f05e878370aca) – Chris