Search code examples
c#xamlchartsuwpwinrt-xaml-toolkit

How to set two-valued columns on UWP chart


I'm using winrt xaml toolkit column chart and i want to create a chart for degrees so i need to set min and max values for every name on the list and I couldn't find a way for that. Here's my code:

Xaml:

<charting:Chart x:Name="chart" FlowDirection="RightToLeft" HorizontalAlignment="Center" Width="800" VerticalAlignment="Top" Height="500" >
     <charting:ColumnSeries Title="month" IndependentValuePath="Name" DependentValuePath="Amount" IsSelectionEnabled="True"/>
 </charting:Chart>

C#

private void LoadChart()
{
    List<weather> list = new List<weather>();
    list.Add(new weather() { Name = "s1", Amount = 5.5 });
    (chart.Series[0] as ColumnSeries).ItemsSource = list;
}

I want it to be like this one in this picture: enter image description here


Solution

  • Here, try this XAML-only sample:

    enter image description here

    XAML:

    <Page x:Class="App8.MainPage"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:chart="using:WinRTXamlToolkit.Controls.DataVisualization.Charting" 
        xmlns:local="using:App8"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        mc:Ignorable="d" Loaded="Page_Loaded">
    
        <Page.Resources>
    
            <local:WeatherCollection x:Key="data1">
                <local:Weather Month="Jan" MinAmount="1" MaxAmount="8"/>
                <local:Weather Month="Feb" MinAmount="3" MaxAmount="9"/>
                <local:Weather Month="Mar" MinAmount="7" MaxAmount="10"/>
                <local:Weather Month="Apr" MinAmount="8" MaxAmount="11"/>
                <local:Weather Month="May" MinAmount="10" MaxAmount="12"/>
                <local:Weather Month="Jun" MinAmount="13" MaxAmount="12"/>
                <local:Weather Month="Jul" MinAmount="15" MaxAmount="11"/>
                <local:Weather Month="Aug" MinAmount="12" MaxAmount="10"/>
                <local:Weather Month="Sep" MinAmount="10" MaxAmount="9"/>
                <local:Weather Month="Oct" MinAmount="9" MaxAmount="8"/>
                <local:Weather Month="Nov" MinAmount="7" MaxAmount="7"/>
                <local:Weather Month="Dec" MinAmount="3" MaxAmount="6"/>
            </local:WeatherCollection>
    
            <Style x:Key="Style1" TargetType="chart:ColumnDataPoint">
                <Setter Property="Background" Value="Transparent"/>
            </Style>
    
        </Page.Resources>
    
        <Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
    
            <chart:Chart Title="Sample Chart">
                <chart:StackedColumnSeries>
                    <chart:SeriesDefinition ItemsSource="{StaticResource data1}"
                                            DependentValuePath="MinAmount"
                                            DataPointStyle="{StaticResource Style1}"
                                            IndependentValuePath="Month"/>
                    <chart:SeriesDefinition ItemsSource="{StaticResource data1}"
                                            DependentValuePath="MaxAmount"
                                            IndependentValuePath="Month"
                                            Title="Temp(C)"/>
                </chart:StackedColumnSeries>
            </chart:Chart>
    
        </Grid>
    </Page>
    

    Model / ViewModel:

    public class WeatherCollection : ObservableCollection<Weather>
    {
    }
    public class Weather
    {
        public string Month { get; set; }
        public double MaxAmount { get; set; }
        public double MinAmount { get; set; }
    }