Articles in this section
Category / Section

How to customize the individual appearance of the WPF Bar Chart (SfChart)?

4 mins read

This article describes how to change the individual appearance of a bar in WPF Chart.

 

Solution 1:  This KB article explains how to change the color for a specific data point in a chart.

Solution 2: You can also customize the interior color of the particular segment based on the respective Y value by using the converter in the CustomTemplate property of ColumnSeries as demonstrated in the following code example. A detailed explanation of this appearance customization can be found in this user documentation page.

XAML

<Grid>
        <Grid.DataContext>
            <local:ViewModel></local:ViewModel>
        </Grid.DataContext>
        <Grid.Resources>
            <local:InteriorConverter x:Key="interiorConverter"></local:InteriorConverter>
        </Grid.Resources>
 
        <chart:SfChart Margin="10">
            <chart:SfChart.PrimaryAxis>
                <chart:CategoryAxis LabelFormat="yyyy"></chart:CategoryAxis>
            </chart:SfChart.PrimaryAxis>
            <chart:SfChart.SecondaryAxis>
                <chart:NumericalAxis></chart:NumericalAxis>
            </chart:SfChart.SecondaryAxis>
            <chart:ColumnSeries XBindingPath="Year" YBindingPath="India" ItemsSource="{Binding DataPoints}">
                <chart:ColumnSeries.CustomTemplate>
                    <DataTemplate>
                        <Canvas>
                            <Rectangle Fill="{Binding Converter={StaticResource interiorConverter}}" Height="{Binding Height}" Width="{Binding Width}" Canvas.Left="{Binding RectX}" Canvas.Top="{Binding RectY}"></Rectangle>
                        </Canvas>
                    </DataTemplate>
                </chart:ColumnSeries.CustomTemplate>
                <chart:ColumnSeries.AdornmentsInfo>
                    <chart:ChartAdornmentInfo LabelPosition="Center" SegmentLabelContent="LabelContentPath" AdornmentsPosition="TopAndBottom" ShowLabel="True">
       <chart:ChartAdornmentInfo.LabelTemplate>
                            <DataTemplate>
                                <StackPanel Orientation="Horizontal">
                                    <Label Content="{Binding Item.India}" Foreground="White" FontSize="11"></Label>
                                </StackPanel>
                            </DataTemplate>
                     </chart:ChartAdornmentInfo.LabelTemplate>
       </chart:ChartAdornmentInfo>
                </chart:ColumnSeries.AdornmentsInfo>
            </chart:ColumnSeries>
        </chart:SfChart>
</Grid>

 

C#

public class ViewModel
{
        public ViewModel()
        {
            this.DataPoints = new ObservableCollection<Model>();
            DateTime year = new DateTime(2005, 5, 1);
 
            DataPoints.Add(new Model() { Year = year.AddYears(1), India = 28, Germany = 31, England = 36, France = 39 });
            DataPoints.Add(new Model() { Year = year.AddYears(2), India = 25, Germany = 28, England = 32, France = 36 });
            DataPoints.Add(new Model() { Year = year.AddYears(3), India = 26, Germany = 30, England = 34, France = 40 });
            DataPoints.Add(new Model() { Year = year.AddYears(4), India = -27, Germany = 36, England = 41, France = 44 });
            DataPoints.Add(new Model() { Year = year.AddYears(5), India = -32, Germany = 36, England = 42, France = 45 });
            DataPoints.Add(new Model() { Year = year.AddYears(6), India = 35, Germany = 39, England = 42, France = 48 });
            DataPoints.Add(new Model() { Year = year.AddYears(7), India = -30, Germany = 38, England = 43, France = 46 });
        }
 
        public ObservableCollection<Model> DataPoints { get; set; }
}
 
public class Model
{
    public DateTime Year { get; set; }
    public double India { get; set; }
    public double Germany { get; set; }
    public double England { get; set; }
    public double France { get; set; }
}
 
public class InteriorConverter : IValueConverter
{
 
        public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
        {
                var ydata = (value as ColumnSegment).YData;
                Brush interior;
 
                interior = ydata > 0 ?
                        new SolidColorBrush(Colors.Green) :
                        new SolidColorBrush(Colors.Red);
 
                return interior;
        }
 
        public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
        {
                throw new NotImplementedException();
        }
}

 

Output

Series Template Customization in WPF Charts

 

You can download the sample in Github.

See Also:

Series customization in WPF SfChart.

How-to-customize-the-chart-series-in-WPF-SfChart?

 

Conclusion

I hope you enjoyed learning about how to customize the individual appearance of the WPF Bar Chart (SfChart).

You can refer to our WPF Chart’s feature tour page to know about its other groundbreaking feature representations. You can also explore our WPF Chart documentation to understand how to present and manipulate data.

For current customers, you can check out our WinForms components from the License and Downloads page. If you are new to Syncfusion, you can try our 30-day free trial to check out our WPF Chart and other WPF components.

If you have any queries or require clarifications, please let us know in comments below. You can also contact us through our support forumsDirect-Trac, or feedback portal. We are always happy to assist you!

 

 

Did you find this information helpful?
Yes
No
Help us improve this page
Please provide feedback or comments
Comments (0)
Please  to leave a comment
Access denied
Access denied