Как связать указанный c цвет указанного столбца c в OxyPlot LinearBarSeries в XAML в c# проекте WPF? - PullRequest
0 голосов
/ 08 января 2020

Любая помощь здесь приветствуется: я хотел бы связать посредством привязки в XAML (или каким-либо другим способом, пока он работает) определенный c цвет столбца столбца с данными в моей серии столбцов. В конечном счете, я хотел бы иметь один цвет для каждого элемента столбца. Я подозреваю, что атрибут цвета может быть добавлен в класс, где хранится значение данных элемента столбца. Пока что по умолчанию все, что я получаю, это один и тот же цвет для каждого столбца столбца на моем графике ... очень скучно, если не сказать больше - можно подумать, что все утилиты построения рядов столбцов могут изменить цвет любого столбца в столбце серия правда ?! Если OxyPlot может это сделать - я пока не нашел решения.

Я попытался создать собственный стиль, чтобы посмотреть, смогу ли я получить представление о классе LinearBarSeries, но оно было расплывчатым. Затем я заглянул внутрь этих классов: DataPointSeries, DataPoint, ColumnItem, ColumnSeries и BarItemBase, но я запутался как никогда.

Мой XAML выглядит так, и в основном это происходит из примера, представленного примером LinearBarSeries OxyPlot:

<Window>
   <Window.Resources>
      <Style x:Key="LinearBarSeriesStyle1" TargetType="{x:Type oxy:LinearBarSeries}">
         <Setter Property="Template">
            <Setter.Value>
               <ControlTemplate TargetType="{x:Type oxy:LinearBarSeries}">
                  <Border Background="{TemplateBinding Background}" BorderThickness="{TemplateBinding BorderThickness}" BorderBrush="{TemplateBinding BorderBrush}" Padding="{TemplateBinding Padding}" SnapsToDevicePixels="true">
                     <ItemsPresenter SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"/>
                  </Border>
               </ControlTemplate>
            </Setter.Value>
         </Setter>
      </Style>
   </Window.Resources>

    <DockPanel>
        <oxy:Plot Title="LinearBarSeries">
            <oxy:Plot.Annotations>
                <oxy:LineAnnotation Type="Horizontal" Y="0"></oxy:LineAnnotation>
            </oxy:Plot.Annotations>
            <oxy:Plot.Axes>
                <oxy:DateTimeAxis IntervalType="Hours" IntervalLength="50"/>
            </oxy:Plot.Axes>
            <oxy:LinearBarSeries Style="{DynamicResource LinearBarSeriesStyle1}" ItemsSource="{Binding Pnls}" Title="P&amp;L" DataFieldX="Time" DataFieldY="Value" FillColor="#454CAF50" StrokeColor="#4CAF50" StrokeThickness="1" BarWidth="5">

            </oxy:LinearBarSeries>
        </oxy:Plot>
    </DockPanel>
</Window>

Пока у меня нет способа изменить цвет элемента столбца для любого столбца данных. Пожалуйста, помогите, если можете, Спасибо!

1 Ответ

0 голосов
/ 09 января 2020

Мне было проще использовать PlotModel для настройки OxyPlot, как в

<oxyWpf:Plot Model="{Binding PlotModel}" />

Таким образом, вы можете добавить несколько Series с разными цветами и добавить к ним свои данные:

var blueLineSeries = new LineSeries{Color = OxyColors.Blue};
blueLineSeries.Points.Add(new DataPoint(/*...*/));
PlotModel.Series.Add(blueLineSeries);
PlotModel.Series.Add(new LineSeries{Color = OxyColors.Green});

В GitHub-репозитории OxyPlot или других ресурсах должно быть много примеров.

...