如何在wpf中的DateTime上使用canvas.SetLeft
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在wpf中的DateTime上使用canvas.SetLeft相关的知识,希望对你有一定的参考价值。
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来计算在正确位置绘制它所需的左侧属性。
以上是关于如何在wpf中的DateTime上使用canvas.SetLeft的主要内容,如果未能解决你的问题,请参考以下文章