0

WPF と c# を使用して Infragistics の最新の XamDataChart をテストしています。折れ線グラフにプロットされたデータ ポイント間の線の色を変更する方法を知っている人はいますか?

また、プロットされたポイントの一部にのみマーカーを配置したいと思います。MarkerType=”None” を使用してシリーズ全体のマーカーのオンとオフを切り替えることができますが、プロットに使用されるコレクションの一部としても利用可能なブール値へのデータ バインディングに基づいて、特定のデータ ポイントだけをマークする方法が見つかりませんでした。 .

これはかなり基本的なもののように思えますが、これまでのところ私は途方に暮れています。

アイデアや提案は大歓迎です。


これを機能させるために考えられることはすべて試しましたが、喜びはありません。

以下のコードでは、問題の本質を失うことなく、できるだけ単純化しようとしました。これはかなり単純に見え、MarkerType データ バインディングを除いてすべてが機能します。エラーのタイプを bool から MarkerType に変更しました。AbcDataSources コレクションに AbcData オブジェクトの大規模なコレクションがあります。データ コンテキストはグリッドに設定されます。LineSeries はデータを正常に取得し、チャートに線が表示されます。

奇妙なことに、すべてのエラー プロパティを enum 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>
4

1 に答える 1

1

カスタム マーカー テンプレートを指定することで、関連付けられたデータに応じてマーカーの可視性を変更できます。シリーズの MarkerTemplate プロパティに DataTemplate を設定すると、データ コンテキストの「Item」を介して、基になるアイテムの値を参照できます。たとえば、楕円の可視性を基になるデータ項目の可視性プロパティにバインドする場合は、次のようになります。

Visibility="{Binding Item.Visibility}"

データ項目に Visibility タイプの Visibility と呼ばれるプロパティがあるとします。

ポイント間で線の色を変える限り、線シリーズはこのようなことをしないように特別に設計されています。

ただし、たとえば、特定のポイントを下回った線のセクションを赤くするなど、単純なことをしたい場合は、データのその部分を別のシリーズに分割し、「UnknownValuePlotting」を使用することをお勧めします" "DontPlot" に設定します。次に、null または NaN として報告されるしきい値を超える値がある場合、値がその値を超えるとラインが不連続になるため、ターゲット値を下回るラインの部分のみが表示されます。このようにして、表示したいさまざまな色にラインを分割できます。

ここでの注意点は、異なる色の 20 万の異なる線分が必要な場合、パフォーマンスの制限に遭遇する可能性があるということです。

別のオプションは、各線分が異なる色を持つことを可能にするカスタム シリーズ (シリーズから継承) を実装することです。

于 2012-11-19T19:28:46.327 に答える