Цветове и опции за маркери на XamDataChart

Тествам най-новия XamDataChart от Infragistics, използвайки WPF и c#. Някой има ли идея как мога да променя цвета на линията между точките от данни, нанесени върху линейна диаграма?

Бих искал също да поставя маркери само върху някои от начертаните точки. Мога да включвам и изключвам маркери за цялата поредица, като използвам MarkerType=”None”, но не намерих начин да маркирам само определени точки от данни въз основа на обвързване на данни с булева стойност, която също е налична като част от колекцията, използвана за чертане .

Това изглежда като доста основни неща, но засега съм на загуба.

Всякакви идеи или предложения ще бъдат високо оценени.


Опитах всичко, което мога да измисля, за да накарам това да работи, но никаква радост.

В кода по-долу се опитах да опростя възможно най-много, без да губя същността на проблема. Изглежда доста просто и всичко работи с изключение на обвързването на данни MarkerType. Промених типа на грешката от bool на MarkerType. Имам голяма колекция от обекти AbcData в колекцията AbcDataSources. Контекстът на данните е зададен в мрежата. 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>

person user1771706    schedule 17.11.2012    source източник


Отговори (1)


Можете да накарате видимостта на маркер да зависи от свързаните данни, като посочите персонализиран шаблон за маркер. Ако зададете DataTemplate на свойството MarkerTemplate на серията, тогава можете да препращате към стойности на основния елемент чрез „Елемент“ в контекста на данните. Например, ако искате да свържете видимостта на елипса към свойство за видимост на основния елемент от данни, това може да изглежда по следния начин:

Visibility="{Обвързващ елемент.Видимост}"

Ако вашият елемент от данни има свойство, наречено Видимост от тип Видимост.

Що се отнася до промяната на цвета на линията между точките, серията от линии е специално проектирана да не прави подобни неща, тъй като може да има ужасни последици, ако искате многоцветна линия, която също има няколко милиона точки, например.

Ако обаче просто искате да направите нещо просто, като например да оцветите всяка част от линията, която пада под определена точка в червено, тогава моето предложение би било да разделите тази част от данните в отделна серия с „UnknownValuePlotting " задайте на "DontPlot". След това, ако имате някаква стойност, която е над прага, отчетете като нула или NaN, вашата линия ще има прекъсвания, когато стойностите са над тази стойност, така че ще се показват само частите от линията под целевата стойност. По този начин можете да разделите една линия на различните цветове, които искате да покажете.

Предупреждението тук е, че ако искате да имате 200 хиляди различни линейни сегмента с различни цветове, може да попаднете на ограничение на производителността.

Друг вариант е да се приложи персонализирана серия (Наследяване от серия), която позволява всеки сегмент от линия да има различен цвят.

person Graham Murray    schedule 19.11.2012
comment
Благодаря за вашия отговор. По-рано разбрах, че MarkerType е базиран на серии, а не на точки от данни. Ще работя върху използването на DataTemplete, което не би трябвало да е трудно с предоставения от вас пример. Имате ли или знаете за пример за създаване на собствени персонализирани серии. Благодаря отново!!! - person user1771706; 20.11.2012