我知道这个问题已被问了十几次,但我找不到解决问题的答案。基本上,我有一个Canvas
控件类的实例,它包含一个Image
控件。我想在{X轴上水平移动Canvas
直到它消失。这是我的代码:
void moveCanvas()
{
int pos = Convert.ToInt32(image.GetValue(Canvas.LeftProperty)); //this line throws an exception
if (pos >= 800)
{
Canvas.SetLeft(image, 20);
}
else
{
Canvas.SetLeft(image, step);
}
}
void timer_Tick(object sender, EventArgs e)
{
step += 20;
moveCanvas();
}
我是WPF的新手,除此之外我不知道如何解决这个问题。
答案 0 :(得分:1)
Canvas.Left
属性的默认值为double.NaN
,无法转换为int
。
您应该在开始动画之前初始化Canvas.Left
:
Canvas.SetLeft(image, 0);
...
void moveCanvas()
{
var pos = Canvas.GetLeft(image);
if (pos >= 800)
{
Canvas.SetLeft(image, 20);
}
else
{
Canvas.SetLeft(image, step);
}
}
使用WPF动画移动图像可能也简单得多:
Canvas.SetLeft(image, 0);
image.BeginAnimation(
Canvas.LeftProperty,
new DoubleAnimation(800, TimeSpan.FromSeconds(10));