我正在使用WPFToolkit创建一个包含多个LineSeries(多种颜色)的折线图。我有一个DataGrid控件,其中DataGrid.RowCount = LineSeriesCount。数据网格显示图表中每一行的相关数据。
当我在dataGrid_SelectedCellsChanged上选择相应的数据网格时,我需要突出显示(将其颜色更改为黑色)图表中的行。
我尝试了以下链接,但没有帮助:Change a style dynamically in WPF
所以var dpStyle = new Style(){BasedOn = originalStyle};没有用。
我正在使用下面的代码创建必要的样式:
public Window1()
{
InitializeComponent();
dataGrid1.Width = mcChart.Width;
HighlightedBlackDataPointStyle = new Style(typeof(LineDataPoint));
HighlightedBlackDataPointStyle.Setters.Add(new Setter(LineDataPoint.VisibilityProperty, Visibility.Hidden)); HighlightedBlackDataPointStyle.Setters.Add(new Setter(LineDataPoint.OpacityProperty, 0.01)); HighlightedBlackDataPointStyle.Setters.Add(new Setter(LineDataPoint.BackgroundProperty, new SolidColorBrush(Colors.Black)));
this.Resources.Add("HighlightedBlackDataPointStyle", HighlightedBlackDataPointStyle);
}
这就是我试图设置上述风格的方式:
private void dataGrid1_SelectedCellsChanged(object sender, System.Windows.Controls.SelectedCellsChangedEventArgs e)
{
if (dataGrid1.SelectedIndex >= 0)
{
mcChart.Series.OfType<LineSeries>().ElementAt(dataGrid1.SelectedIndex).DataPointStyle = HighlightedBlackDataPointStyle;
mcChart.Series.OfType<LineSeries>().ElementAt(dataGrid1.SelectedIndex).Refresh();
mcChart.Series.OfType<LineSeries>().ElementAt(dataGrid1.SelectedIndex).UpdateLayout();
mcChart.UpdateLayout();
}
}
这会将Legend的颜色更改为黑色而不是预期的行。
我在创建它时通过设置Sytle在C#codebehind中添加了所有lineSeries。我在XAML中没有任何样式定义。因此,不确定我是否可以使用XAML中的DynamicResource绑定。
请让我知道如何从C#代码而不是XAML实现这一目标。
答案 0 :(得分:0)
这个问题已经过时了,但我会回答,因为也许有人有同样的问题。
实际上它并不像看起来那么困难。
要更改线条的颜色,只需使用Background
的{{1}}属性:
LineSeries
我使用 private Brush previousColor;
private void DataGrid_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
if (e.RemovedItems != null && e.RemovedItems.Count > 0)
{
var removedItem = (ItemViewModel)e.RemovedItems[0];
var line = chart.Series.OfType<LineSeries>().FirstOrDefault(ls => (int)ls.Tag == removedItem.Id);
line.Background = previousColor;
}
if (e.AddedItems != null && e.AddedItems.Count > 0)
{
var selectedItem = (ItemViewModel)e.AddedItems[0];
var line = chart.Series.OfType<LineSeries>().FirstOrDefault(ls => (int)ls.Tag == selectedItem.Id);
previousColor = line.Background;
line.Background = Brushes.Black;
}
}
属性,因为可以通过排序更改项的行索引,而Id始终是相同的。
Tag
我尚未发布<charting:Chart x:Name="chart" DataContext="{Binding Items}" Grid.Row="1" Grid.Column="1">
<charting:Chart.Series>
<charting:LineSeries DataContext="{Binding [0]}" ItemsSource="{Binding ChartItems}" Title="{Binding Title}" Tag="{Binding Id}"
IndependentValuePath="XValue" DependentValuePath="YValue" />
的代码和ItemViewModel
的xaml,但我认为主要想法很明确。