指定颜色以WPF工具包图表供LineSeries附近图例项矩形 [英] Assigning color to the rectangle near legend items in wpf toolkit charting lineseries

查看:1850
本文介绍了指定颜色以WPF工具包图表供LineSeries附近图例项矩形的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我动态地添加供LineSeries到图表如下:



<类=片段 - 代码HTML语言,HTML prettyprint重写的预> 的foreach(KeyValuePair<字符串列表< KeyValuePair<日期时间,双>> ;> tempSeries在yieldSeries){供LineSeries供LineSeries =新供LineSeries(); lineSeries.DependentValuePath =值; lineSeries.IndependentValuePath =键; lineSeries.ItemsSource = tempSeries.Value; lineSeries.Title = tempSeries.Key; lineSeries.SetResourceReference(FrameworkElement.StylePropertyCommonLineSeries); lineSeries.Tag = Brushes.Red; lineSeries.Background = Brushes.Red; yieldTrendChart.Series.Add(供LineSeries);}



我想分配在特定的顺序检测LineSeries实现这一特定的颜色我添加了一个样式折线如下:



<预类=片段 - 代码HTML语言,HTML prettyprint-覆盖> <风格X:键= CommonLineSeries的TargetType =图表:供LineSeries支持算法FMP ={StaticResource的{X:类型的图表:供LineSeries}}> < setter属性=模板> < Setter.Value> <的ControlTemplate的TargetType =图表:供LineSeries> <帆布X:NAME =PlotArea> <折线点数={TemplateBinding点}行程={绑定标记,的RelativeSource = {的RelativeSource AncestorType = {X:类型的图表:供LineSeries}}}风格={TemplateBinding PolylineStyle}/> < /帆布> < /控件模板> < /Setter.Value> < /二传手> < /样式和GT;



问题
的颜色是成功分配到图中的然而矩形传说附近的线仍显示由指定颜色随机.NET
如何将我分配同色的矩形,因为我已将其分配给该行??


解决方案

您需要编辑一个LegendItem风格改变传说矩形的颜色。



XAML

 窗口x:类=WpfApplication8.Window1
的xmlns =http://schemas.microsoft.com/winfx/2006/xaml/presentation
的xmlns:X =HTTP: //schemas.microsoft.com/winfx/2006/xaml
的xmlns:chartingToolkit =CLR的命名空间:System.Windows.Controls.DataVisualization.Charting;装配= System.Windows.Controls.DataVisualization.Toolkit
的xmlns:visualizationToolkit =CLR的命名空间:System.Windows.Controls.DataVisualization;装配= System.Windows.Controls.DataVisualization.Toolkit
的xmlns:datavis =CLR的命名空间:System.Windows.Controls .DataVisualization;装配= System.Windows.Controls.DataVisualization.Toolkit
标题=窗口1HEIGHT =500WIDTH =700>
< Window.Resources>
<风格X:键=LineSeriesStyle1的TargetType ={X:类型chartingToolkit:供LineSeries}>
< setter属性=IsTabStopVALUE =FALSE/>
< setter属性=模板>
< Setter.Value>
<的ControlTemplate的TargetType ={X:类型chartingToolkit:供LineSeries}>
<帆布X:NAME =PlotArea>
<折线点数={TemplateBinding点}行程={绑定标记,的RelativeSource = {的RelativeSource AncestorType = {X:类型chartingToolkit:供LineSeries}}}/>
< /帆布>
< /控件模板>
< /Setter.Value>
< /二传手>
< /样式和GT;
< /Window.Resources>
<网格和GT;
< chartingToolkit:图表X:NAME =mcChart>
< chartingToolkit:供LineSeries标签=绿色X:NAME =图DependentValuePath =值IsSelectionEnabled =真IndependentValuePath =密钥的ItemsSource ={结合}风格={StaticResource的LineSeriesStyle1} >
< chartingToolkit:LineSeries.LegendItemStyle>
<风格的TargetType =chartingToolkit:将LegendItem>
< setter属性=模板>
< Setter.Value>
<的ControlTemplate的TargetType ={X:类型chartingToolkit:将LegendItem}>
< BORDER = BorderBrush黑了borderThickness =0>
<&StackPanel的GT;
< StackPanel的方向=横向>
<矩形宽度=12HEIGHT =12填充={绑定的ElementName =图,路径=标签}StrokeThickness =1/>
< datavis:标题内容={TemplateBinding内容}前景={绑定的ElementName =图,路径=标签}字号=18保证金=10/>
< / StackPanel的>
< / StackPanel的>
< /边框>
< /控件模板>
< /Setter.Value>
< /二传手>
< /样式和GT;
< / chartingToolkit:LineSeries.LegendItemStyle>
< / chartingToolkit:供LineSeries>
< / chartingToolkit:图表>
< /网格和GT;





C#

 命名空间WpfApplication8 

{

 公共部分类窗口1:窗口
{
公共窗口1( )
{
的InitializeComponent();
LoadColumnChartData();
}

私人无效LoadColumnChartData()
{
((供LineSeries)mcChart.Series [0])的ItemsSource =
新KeyValuePair<字符串, INT> [] {
新KeyValuePair<字符串,整数>(项目经理,13),
新KeyValuePair<字符串,整数>(CEO,23)};

}
}



}



结果



更新

 < Window.Resources> 
<风格X:键=LineSeriesStyle1的TargetType ={X:类型chartingToolkit:供LineSeries}>
< setter属性=变量VALUE ={绑定标记,的RelativeSource = {的RelativeSource AncestorType = {X:类型chartingToolkit:供LineSeries}}}>< /二传手>
< setter属性=OverridesDefaultStyleVALUE =真>< /二传手>
< setter属性=IsTabStopVALUE =FALSE/>
< setter属性=模板>
< Setter.Value>
<的ControlTemplate的TargetType ={X:类型chartingToolkit:供LineSeries}>
<帆布X:NAME =PlotArea>
<折线X:NAME =折线点数={TemplateBinding点}行程={绑定标记,的RelativeSource = {的RelativeSource TemplatedParent}}/>
< /帆布>
< /控件模板>
< /Setter.Value>
< /二传手>
< /样式和GT;


< /Window.Resources>
<网格和GT;
< chartingToolkit:图表名=折线图>
< chartingToolkit:供LineSeries NAME =chart1标签=蓝色背景=绿色风格={StaticResource的LineSeriesStyle1}标题=KW GastatsDependentValuePath =值IndependentValuePath =密钥的ItemsSource = {结合[0]}IsSelectionEnabled =真>
< chartingToolkit:LineSeries.LegendItemStyle>
<风格的TargetType ={X:类型chartingToolkit:将LegendItem}>
< setter属性=模板>
< Setter.Value>
<的ControlTemplate的TargetType ={X:类型chartingToolkit:将LegendItem}>
< BORDER>
<&StackPanel的GT;
< StackPanel的方向=横向>
<矩形宽度=12HEIGHT =12填充={绑定的ElementName = chart1,路径=标签}行程={结合背景}StrokeThickness =1/>
< datavis:标题内容={TemplateBinding内容}前景={绑定的ElementName = chart1,路径=标签}字号=18保证金=10/>
< / StackPanel的>
< / StackPanel的>
< /边框>
< /控件模板>
< /Setter.Value>
< /二传手>
< /样式和GT;
< / chartingToolkit:LineSeries.LegendItemStyle>
< / chartingToolkit:供LineSeries>
< chartingToolkit:供LineSeries NAME =chart2标签=绿色风格={StaticResource的LineSeriesStyle1}标题=Preu KWDependentValuePath =值IndependentValuePath =密钥的ItemsSource ={结合[1 ]}IsSelectionEnabled =真>
< chartingToolkit:LineSeries.LegendItemStyle>
<风格的TargetType ={X:类型chartingToolkit:将LegendItem}>
< setter属性=模板>
< Setter.Value>
<的ControlTemplate的TargetType ={X:类型chartingToolkit:将LegendItem}>
< BORDER>
<&StackPanel的GT;
< StackPanel的方向=横向>
<矩形宽度=12HEIGHT =12填充={绑定的ElementName = chart2,路径=标签}StrokeThickness =1/>
< datavis:标题内容={TemplateBinding内容}前景={绑定的ElementName = chart2,路径=标签}字号=18保证金=10/>
< / StackPanel的>
< / StackPanel的>
< /边框>
< /控件模板>
< /Setter.Value>
< /二传手>
< /样式和GT;
< / chartingToolkit:LineSeries.LegendItemStyle>
< / chartingToolkit:供LineSeries>
< / chartingToolkit:图表>
< /网格和GT;



C#代码



 的InitializeComponent(); 

名单,LT; KeyValuePair<日期时间,INT>> llistaGastats =新的List< KeyValuePair<日期时间,INT>>();
llistaGastats.Add(新KeyValuePair<日期时间,INT>(DateTime.Now,100));
llistaGastats.Add(新KeyValuePair<日期时间,INT>(DateTime.Now.AddMonths(1),200));
名单,LT; KeyValuePair<日期时间,INT>> llistaPreu =新的List< KeyValuePair<日期时间,INT>>();
llistaPreu.Add(新KeyValuePair<日期时间,INT>(DateTime.Now,300));
llistaPreu.Add(新KeyValuePair<日期时间,INT>(DateTime.Now.AddMonths(1),300));
变种dataSourceList =新的List<名单,LT; KeyValuePair<日期时间,INT>>>();
dataSourceList.Add(llistaGastats);
dataSourceList.Add(llistaPreu);
lineChart.DataContext = dataSourceList;



结果




I am adding lineseries to a chart dynamically as follows.

foreach (KeyValuePair<string, List<KeyValuePair<DateTime, double>>> tempSeries in yieldSeries)
{
	LineSeries lineSeries = new LineSeries();
	lineSeries.DependentValuePath = "Value";
	lineSeries.IndependentValuePath = "Key";
	lineSeries.ItemsSource = tempSeries.Value;
	lineSeries.Title = tempSeries.Key;
	lineSeries.SetResourceReference(FrameworkElement.StyleProperty,"CommonLineSeries");
	lineSeries.Tag = Brushes.Red;
	
	lineSeries.Background = Brushes.Red;
	
	yieldTrendChart.Series.Add(lineSeries);
}

I wish to assign specific color in specific order for the lineseries to attain this I have added a style for the polyline as follows

<Style x:Key="CommonLineSeries" TargetType="charting:LineSeries" BasedOn="{StaticResource {x:Type charting:LineSeries}}">
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="charting:LineSeries">
                <Canvas x:Name="PlotArea">
                    <Polyline Points="{TemplateBinding Points}" Stroke="{Binding Tag, RelativeSource={RelativeSource AncestorType={x:Type charting:LineSeries}}}" Style="{TemplateBinding PolylineStyle}"/>
                </Canvas>
            </ControlTemplate>
        </Setter.Value>
    </Setter>        
</Style>

Problem The color is successfully assigned to the lines in the graph however the rectangle near the legend still shows the color assigned by .net randomly. How shall I assign the same color to the rectangle as I have assigned it to the line??

解决方案

You need to edit LegendItem Style to change color of legend rectangle.

xaml

Window x:Class="WpfApplication8.Window1"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"             
    xmlns:chartingToolkit="clr-namespace:System.Windows.Controls.DataVisualization.Charting;assembly=System.Windows.Controls.DataVisualization.Toolkit"
    xmlns:visualizationToolkit="clr-namespace:System.Windows.Controls.DataVisualization;assembly=System.Windows.Controls.DataVisualization.Toolkit"
    xmlns:datavis ="clr-namespace:System.Windows.Controls.DataVisualization;assembly=System.Windows.Controls.DataVisualization.Toolkit"
    Title="Window1" Height="500" Width="700">
<Window.Resources>
    <Style x:Key="LineSeriesStyle1" TargetType="{x:Type chartingToolkit:LineSeries}">
        <Setter Property="IsTabStop" Value="False"/>
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="{x:Type chartingToolkit:LineSeries}">
                    <Canvas x:Name="PlotArea">
                        <Polyline Points="{TemplateBinding Points}" Stroke="{Binding Tag,RelativeSource={RelativeSource AncestorType={x:Type chartingToolkit:LineSeries}}}" />
                    </Canvas>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>
</Window.Resources>
<Grid>
    <chartingToolkit:Chart x:Name="mcChart"  >
        <chartingToolkit:LineSeries Tag="Green" x:Name="chart" DependentValuePath="Value"  IsSelectionEnabled="True" IndependentValuePath="Key" ItemsSource="{Binding}" Style="{StaticResource LineSeriesStyle1}">
            <chartingToolkit:LineSeries.LegendItemStyle>
                <Style TargetType="chartingToolkit:LegendItem" >
                    <Setter Property="Template">
                        <Setter.Value>
                            <ControlTemplate TargetType="{x:Type chartingToolkit:LegendItem}">
                                <Border BorderBrush="Black" BorderThickness="0">
                                    <StackPanel>
                                        <StackPanel Orientation="Horizontal" >
                                            <Rectangle Width="12" Height="12" Fill="{Binding ElementName=chart,Path=Tag}" StrokeThickness="1"  />
                                            <datavis:Title Content="{TemplateBinding Content}" Foreground="{Binding ElementName=chart,Path=Tag}" FontSize="18" Margin="10"/>
                                        </StackPanel>
                                    </StackPanel>
                                </Border>
                            </ControlTemplate>
                        </Setter.Value>
                    </Setter>
                </Style>
            </chartingToolkit:LineSeries.LegendItemStyle>
        </chartingToolkit:LineSeries>
    </chartingToolkit:Chart>
</Grid>

c#

namespace WpfApplication8

{

public partial class Window1 : Window
{
    public Window1()
    {
        InitializeComponent();
        LoadColumnChartData();
    }

    private void LoadColumnChartData()
    {
        ((LineSeries)mcChart.Series[0]).ItemsSource =
        new KeyValuePair<string, int>[]{
        new KeyValuePair<string,int>("Project Manager", 13),
        new KeyValuePair<string,int>("CEO", 23),};

    }
}

}

Result

Update

 <Window.Resources>
    <Style x:Key="LineSeriesStyle1" TargetType="{x:Type chartingToolkit:LineSeries}">
        <Setter Property="Tag" Value="{Binding Tag,RelativeSource={RelativeSource AncestorType={x:Type chartingToolkit:LineSeries}}}"></Setter>
        <Setter Property="OverridesDefaultStyle" Value="True"></Setter>
        <Setter Property="IsTabStop" Value="False"/>
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="{x:Type chartingToolkit:LineSeries}">
                    <Canvas x:Name="PlotArea">
                        <Polyline x:Name="polyline"  Points="{TemplateBinding Points}" Stroke="{Binding Tag,RelativeSource={RelativeSource TemplatedParent}}" />
                    </Canvas>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>


</Window.Resources>
<Grid>
    <chartingToolkit:Chart Name="lineChart">
        <chartingToolkit:LineSeries Name="chart1" Tag="Blue" Background="Green"  Style="{StaticResource LineSeriesStyle1}" Title="KW Gastats"  DependentValuePath="Value" IndependentValuePath="Key" ItemsSource="{Binding [0]}" IsSelectionEnabled="True">
            <chartingToolkit:LineSeries.LegendItemStyle>
                <Style TargetType="{x:Type chartingToolkit:LegendItem}" >
                    <Setter Property="Template">
                        <Setter.Value>
                            <ControlTemplate TargetType="{x:Type chartingToolkit:LegendItem}">
                                <Border >
                                    <StackPanel>
                                        <StackPanel Orientation="Horizontal" >
                                            <Rectangle Width="12" Height="12" Fill="{Binding ElementName=chart1,Path=Tag}"  Stroke="{Binding Background}" StrokeThickness="1"  />
                                            <datavis:Title Content="{TemplateBinding Content}" Foreground="{Binding ElementName=chart1,Path=Tag}" FontSize="18" Margin="10"/>
                                        </StackPanel>
                                    </StackPanel>
                                </Border>
                            </ControlTemplate>
                        </Setter.Value>
                    </Setter>
                </Style>
            </chartingToolkit:LineSeries.LegendItemStyle>
        </chartingToolkit:LineSeries>
        <chartingToolkit:LineSeries Name="chart2" Tag="Green"   Style="{StaticResource LineSeriesStyle1}" Title="Preu KW"   DependentValuePath="Value" IndependentValuePath="Key" ItemsSource="{Binding [1]}" IsSelectionEnabled="True" >
            <chartingToolkit:LineSeries.LegendItemStyle>
                <Style TargetType="{x:Type chartingToolkit:LegendItem}" >
                    <Setter Property="Template">
                        <Setter.Value>
                            <ControlTemplate TargetType="{x:Type chartingToolkit:LegendItem}">
                                <Border >
                                    <StackPanel>
                                        <StackPanel Orientation="Horizontal" >
                                            <Rectangle Width="12" Height="12" Fill="{Binding ElementName=chart2,Path=Tag}"   StrokeThickness="1"  />
                                            <datavis:Title Content="{TemplateBinding Content}" Foreground="{Binding ElementName=chart2,Path=Tag}" FontSize="18" Margin="10"/>
                                        </StackPanel>
                                    </StackPanel>
                                </Border>
                            </ControlTemplate>
                        </Setter.Value>
                    </Setter>
                </Style>
            </chartingToolkit:LineSeries.LegendItemStyle>
        </chartingToolkit:LineSeries>
    </chartingToolkit:Chart>
</Grid>

c# Code

InitializeComponent();

        List<KeyValuePair<DateTime, int>> llistaGastats = new List<KeyValuePair<DateTime, int>>();
        llistaGastats.Add(new KeyValuePair<DateTime, int>(DateTime.Now, 100));
        llistaGastats.Add(new KeyValuePair<DateTime, int>(DateTime.Now.AddMonths(1), 200));
        List<KeyValuePair<DateTime, int>> llistaPreu = new List<KeyValuePair<DateTime, int>>();
        llistaPreu.Add(new KeyValuePair<DateTime, int>(DateTime.Now, 300));
        llistaPreu.Add(new KeyValuePair<DateTime, int>(DateTime.Now.AddMonths(1), 300));
        var dataSourceList = new List<List<KeyValuePair<DateTime, int>>>();
        dataSourceList.Add(llistaGastats);
        dataSourceList.Add(llistaPreu);
        lineChart.DataContext = dataSourceList;

Result

这篇关于指定颜色以WPF工具包图表供LineSeries附近图例项矩形的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆