Sesaonallist
是ObservableCollection
类型的DataPoint
。
我试图将可观察集合中的每个datapoint
写成椭圆并将其绘制到画布上。问题是X axis
是DateTime
,我得到了错误
无法将DateTime转换为double
当我使用Canvas.SetLeft(ellipse, Seasonallist[i].X);
。
如果我查看转换器,我不想使用任何第三方库来执行此操作?
Seasonallist = new ObservableCollection<DataPoint>();
if (Seasonallist != null)
{
for (int i = 0; i <= Seasonallist.Count - 1; i++)
{
Ellipse ellipse = new Ellipse();
ellipse.Width = 5;
ellipse.Height = 5;
ellipse.Fill = Brushes.Blue;
Canvas.SetLeft(ellipse, Seasonallist[i].X); <--error here
Canvas.SetTop(ellipse, Seasonallist.Y);
textCanvas.Children.Add(ellipse);
}
}
public class DataPoint
{
public DateTime X { get; set; }
public double Y { get; set; }
}
你可以试试Ticks
的DataTime
属性。
Canvas.SetLeft(ellipse, Convert.ToDouble(Seasonallist[i].X.Ticks));
你必须找到一个很好的方法将这个大数字转换成X Canvas协调。
是的,您需要使用转换器,但首先必须确定时间间隔的宽度。最好使用ticks值来完成,这样:
TicksPerPixel是显示持续时间/显示宽度
然后,您可以存储此值并使用公式DateTime.Ticks / TicksPerPixel来计算在正确位置绘制它所需的左侧属性。