2012-11-17 46 views
0

我正在使用WPF和c#測試來自Infragistics的最新XamDataChart。有沒有人有一個想法,我可以如何改變線圖上繪製的數據點之間的線的顏色?XamDataChart繪製顏色和標記選項

我也想只在一些繪製點上放置標記。我可以使用MarkerType =「None」打開或關閉整個系列的標記,但尚未找到基於數據綁定的布爾值標記某些數據點的方法,該布爾值也可用作繪圖集合的一部分。

這似乎是相當基本的東西,但到目前爲止我不知所措。

任何想法或建議將不勝感激。


我已經嘗試了所有我能想到的工作,但沒有喜悅。

在下面的代碼中,我試圖儘可能簡化而不會丟失問題的本質。它看起來相當簡單,除了MarkerType數據綁定外,其他所有工作都可以使用。我已將錯誤的類型從bool更改爲MarkerType。我在AbcDataSources集合中有大量的AbcData對象。數據上下文在網格上設置。 LineSeries獲取其數據並且圖表顯示線條。

奇怪的是我已將所有錯誤屬性設置爲枚舉MarkerType.Circle類型,並在Xaml設計器中顯示了圓圈。當程序運行時,他們不會。

其他信息:即時通訊使用VS2012,.NET 4.5,Infragistics的WPF 2012 V2

再次理解這個的任何援助將不勝感激。

public class AbcData : BindableBase 
{ 
    private Single _dataValue; 
    private MarkerType _error; 

    public Single DataValue 
    { 
     get { return _dataValue; } 
     set { SetProperty(ref _dataValue, value); } 
    } 

    public MarkerType Error 
    { 
     get { return _error; } 
     set { SetProperty(ref _error, value); } 
    } 
} 

public class AbcDataSource 
{ 
    private readonly ObservableCollection<AbcData> _rawMDP = new ObservableCollection<AbcData>(); 

    public ObservableCollection<AbcData> RawMDP 
    { 
     get { return _rawMDP; } 
    } 
} 

<Grid> 
    <Grid.DataContext> 
    <Data:AbcDataSource/> 
    </Grid.DataContext> 

    <Grid.RowDefinitions> 
     <RowDefinition Height="*" /> 
     <RowDefinition Height="16" /> 
    </Grid.RowDefinitions> 

    <ig:XamDataChart x:Name="RTChart" Grid.Row="0" HorizontalZoomable="True" WindowScaleHorizontal="0.25" 
      WindowPositionHorizontal="1" HorizontalZoombarVisibility="Visible" VerticalZoomable="True" 
      VerticalZoombarVisibility="Visible" PlotAreaBackground="Black" CrosshairVisibility="Visible" Background="Black"> 

     <ig:XamDataChart.Axes> 
      <ig:NumericYAxis x:Name="YAxis" Interval="1" Label="{}{:n2}" > 
       <ig:NumericYAxis.LabelSettings> 
        <ig:AxisLabelSettings Location="OutsideRight" Foreground="White" FontSize="10" 
          Extent="45" /> 
       </ig:NumericYAxis.LabelSettings> 
      </ig:NumericYAxis> 
      <ig:CategoryXAxis x:Name="XAxis" Label="{}{XDateTime:HH:mm}" ItemsSource="{Binding RawMDP}" > 
       <ig:CategoryXAxis.LabelSettings> 
        <ig:AxisLabelSettings Foreground="White" FontSize="10" /> 
       </ig:CategoryXAxis.LabelSettings> 
      </ig:CategoryXAxis> 
     </ig:XamDataChart.Axes> 

     <ig:XamDataChart.Series> 

      <ig:LineSeries x:Name="DataValue" 
           MarkerType="{Binding RawMDP/Error}" 
           XAxis="{Binding ElementName=XAxis}" 
           YAxis="{Binding ElementName=YAxis}" 
           ItemsSource="{Binding Path=RawMDP}" 
           ValueMemberPath="DataValue" /> 

     </ig:XamDataChart.Series> 

    </ig:XamDataChart> 

</Grid> 

回答

1

通過指定自定義標記模板,您可以根據關聯的數據獲得標記的可見性。如果您在系列的MarkerTemplate屬性上設置DataTemplate,則可以通過數據上下文中的「Item」在基礎項目上引用值。例如,如果你想一個橢圓形的知名度綁定到底層數據項的可見性屬性,它可能是這個樣子:

能見度=「{結合Item.Visibility}」

如果您的數據項目有一個名爲可見性類型可見性的屬性。

就點線之間的線條顏色變化而言,線條系列專門設計爲不要做這樣的事情,因爲如果您想要一條也有幾百萬個點的多色線條,可能會產生可怕的後果,例如。然而,如果你只是想做一些簡單的事情,例如,爲行中的任何部分着色,使其低於某個特定點的紅色,那麼我的建議就是將這部分數據分成單獨的系列,「UnknownValuePlotting」設置爲「DontPlot」。然後,如果任何超過閾值報告的值爲空值或NaN,那麼當值超過該值時,您的行將會出現不連續性,因此只會顯示目標值下的行部分。通過這種方式,您可以將一條線分成您想要顯示的不同顏色。

這裏需要注意的是,如果要使用不同顏色的20萬不同線段,可能會遇到性能限制。

另一種方法是實現自定義系列(從系列繼承),允許每個線段具有不同的顏色。

+0

例如:http://www.infragistics.com/community/forums/t/54025.aspx –

+0

感謝您的回覆。我之前認識到MarkerType是基於系列而不是基於數據點的。我將努力使用DataTemplete,在您提供示例的情況下應該不難。你有沒有或知道創建自己的自定義系列的例子。再次感謝!!! – user1771706