获取和设置WPF Canvas控件的左侧属性

时间:2016-02-23 05:49:30

标签: wpf silverlight

我知道这个问题已被问了十几次,但我找不到解决问题的答案。基本上,我有一个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的新手,除此之外我不知道如何解决这个问题。

1 个答案:

答案 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));