SciChart® the market leader in Fast WPF Charts, WPF 3D Charts, and now iOS Charting & Android Chart Components

Welcome to the SciChart Community Forums!

Please use the forums below to ask questions about SciChart. Take a moment to read our Question asking guidelines on how to ask a good question and our support policy. We also have a tag=SciChart on Stackoverflow.com where you can earn rep for your questions!

Please note: SciChart team will only answer questions from customers with active support subscriptions. Expired support questions will be ignored. If your support status shows incorrectly, contact us and we will be glad to help.

0
0

Dear all,

I am using part of your sample where we can select the renderable series through MVVM patterns, This works great but by default I set the style them ExpressionLight for my chart, but I need to overwrite the style for the render series when building them

From your sample code you have the following :

if (type == typeof(LineRenderableSeriesViewModel))
        {
            return new LineRenderableSeriesViewModel { 
                DataSeries = xyDataSeries,
                StyleKey = "LineStyle"
            };
        }

What I try to do is that in ma application resource file I have define a style with a x:key name that I would like to use to represent the line series, like color, strokethickness, dash,…. In the constructor above you expect to get a string key value for StyleKey.

hoy can I pass my own Style resource to LineRenderableSeriesViewModel ?

Thanks for help

Version
4
  • You must to post comments
0
0

You’re mixing a few concepts here.

  1. Theme – is a set of colors applied to a chart

  2. Style – is a WPF Style applied to an element in a chart (which might contain colors, or other property values).

In the MVVM API you apply a stylekey using this technique:

First, declare a style with Key

<UserControl x:Class="WpfApplication3.HelloSciChartWorld"
          xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
          xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
          xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
          xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
          xmlns:s="http://schemas.abtsoftware.co.uk/scichart"
          xmlns:local="clr-namespace:WpfApplication3"
          mc:Ignorable="d"
          d:DesignHeight="400" d:DesignWidth="600">
   <UserControl.Resources>
      <local:HelloSciChartWorldViewModel x:Key="viewModel"/>

      <Style TargetType="s:FastLineRenderableSeries" x:Key="LineSeriesStyle0">
         <Setter Property="StrokeDashArray" Value="5 5"/>
         <Setter Property="StrokeThickness" Value="4"/>
         <Setter Property="Stroke" Value="Orange"/>
         <Setter Property="SelectedSeriesStyle">
            <Setter.Value>
               <Style TargetType="s:FastLineRenderableSeries">
                  <Setter Property="StrokeDashArray" Value="5 5"/>
                  <Setter Property="StrokeThickness" Value="3"/>
                  <Setter Property="Stroke" Value="White"/>
               </Style>
            </Setter.Value>
         </Setter>
      </Style>

   </UserControl.Resources>

   <Grid DataContext="{StaticResource viewModel}">
      <s:SciChartSurface RenderableSeries="{s:SeriesBinding SeriesViewModels}">
         <s:SciChartSurface.XAxis>
            <s:NumericAxis/>
         </s:SciChartSurface.XAxis>

         <s:SciChartSurface.YAxis>
            <s:NumericAxis GrowBy="0.1, 0.1"/>
         </s:SciChartSurface.YAxis>

      </s:SciChartSurface>
   </Grid>
</UserControl>

Second, apply the StyleKey via the StyleKey property of RenderableSeriesViewModel

public class HelloSciChartWorldViewModel : INotifyPropertyChanged
{
       private readonly ObservableCollection<IRenderableSeriesViewModel> _seriesViewModels = new ObservableCollection<IRenderableSeriesViewModel>();

       public event PropertyChangedEventHandler PropertyChanged;

       public HelloSciChartWorldViewModel()
       {
             var xyData = new XyDataSeries<double, double>();
             for (int i = 0; i < 100; i++)
             {
                    xyData.Append(i, Math.Sin(i * 0.2));
             }

             SeriesViewModels.Add(new LineRenderableSeriesViewModel()
             {
                    DataSeries = xyData,       
                    // Set the StyleKey equal to the x:Key in XAML
                    StyleKey = "LineSeriesStyle0"
             });
       }

       public ObservableCollection<IRenderableSeriesViewModel> SeriesViewModels
       {
             get { return _seriesViewModels; }
       }

       protected virtual void OnPropertyChanged(string propertyName)
       {
             var handler = PropertyChanged;
             if (handler != null)
             {
                    handler(this, new PropertyChangedEventArgs(propertyName));
             }           
       }
}

That is it, and it should work if followed correctly.

Best regards,
Andrew

  • You must to post comments
Showing 1 result
Your Answer

Please first to submit.