我正在尝试使用基于双倍的垂直系列来理解Mappers.XY类。为了测试它,我希望Y轴的所有偶数索引都是红色的,但是.Fill似乎只使用X值。下面是我的代码和结果:
var RedBrush = new SolidColorBrush(Color.FromRgb(238, 83, 80));
Mapper = Mappers.Xy<double>()
.X((value, index) => value)
.Y((value, index) => index)
.Fill(index => index % 2 == 0 ? RedBrush : null)
.Stroke(index => index % 2 == 0 ? RedBrush : null);只有当X值为(如下图所示)时,我才会使用红条:红X值,我甚至将.Fill更改为基于值,但没有改变。
编辑:我认为我已经将问题缩小到使用.Fill的默认方法,即:
public CartesianMapper<T> Fill(Func<T, object> predicate);我认为这使用了双数作为填充的基础,在我的例子中,它将是X值。相反,我应该为.Fill使用重载,它似乎将索引视为int...which,这是我想要的:
public CartesianMapper<T> Fill(Func<T, int, object> predicate);问题是我不知道怎么用这个。而不是拥有:
.Fill(index => index % 2 == 0 ? RedBrush : null)应该是什么?我的兰达技能是新手级的。
*以前可以忽略的案文.
我在这里回顾了帮助的类型和配置:https://lvcharts.net/App/examples/v1/wpf/Types%20and%20Configuration,更具体地说,我试图将这两个概念改编成我自己的概念:
在定义Series集合实例时,还可以传递默认配置,此配置覆盖全局配置,只有在Series配置为null时才会设置:
var mapper = Mappers.Xy<MyClass>().X(v => v.XProp).Y(v => v.YProp);
var seriesCollection = new SeriesCollection(mapper);
myChart.SeriesCollection = seriesCollection;最后,您还可以只为一个系列定义映射程序,这将覆盖>全局配置和SeriesCollection配置:
var mapper = Mappers.Xy<MyClass>().X(v => v.XProp).Y(v => v.YProp);
var pieSeries = new PieSeries(mapper);问题是,示例中使用的属性是ObservablePoints,但我没有属性,因为我只是在使用双倍。
有谁知道只用双倍就能做到这一点吗?有其他选择吗?
发布于 2017-11-21 21:28:27
您需要更改.Fill的lambda表达式如下:
var Mapper = Mappers.Xy<double>()
.X((value, index) => value)
.Y((value, index) => index)
.Fill((value, index) => index % 2 == 0 ? RedBrush : null);由于某种原因,在表达式中,lambda表达式似乎是计算值% 2而不是索引%2。
下面是使用映射器绘制的行系列图表的图像:

https://stackoverflow.com/questions/47327269
复制相似问题