动态更改画布对象的图像源

时间:2012-11-27 22:35:45

标签: c# wpf

我有一个在计时器上运行的动画以及其他一些动画。我希望能够在触发事件时更改图像源文件,但我目前无法访问element.Source(元素等于当前画布对象,即图像)。

public static void Clouds(Canvas canvas, int boundry)
{
    var random = new Random();
    foreach (FrameworkElement element in canvas.Children)
    {
        var elementName = Regex.Split(element.Name, "_");
        if (elementName[0] == "cloud")
        {
            if (Canvas.GetLeft(element) < canvas.ActualWidth + element.Width)
            {
                Canvas.SetLeft(element, Canvas.GetLeft(element) + 1);
            } else
            {
                // Change image source file here.
                Canvas.SetTop(element, random.Next(0 - ((int)element.Height / 2), Core.GetPercentage((int)canvas.ActualHeight, boundry)));
                Canvas.SetLeft(element, 0 - element.Width);
            }
        }
    }
}

任何帮助都会很棒,谢谢。

1 个答案:

答案 0 :(得分:0)

因为FrameworkElement没有名为Source的属性,你必须强制转换或只选择你想要的图像元素。

这样的事可能有效

        public static void Clouds(Canvas canvas, int boundry)
        {
            var random = new Random();
            foreach (var image in canvas.Children.OfType<Image>())
            {
                if (image.Name.Contains("cloud_"))
                {
                    if (Canvas.GetLeft(image) < canvas.ActualWidth + image.Width)
                    {
                        Canvas.SetLeft(image, Canvas.GetLeft(image) + 1);
                    }
                    else
                    {
                        Canvas.SetTop(image, random.Next(0 - ((int)image.Height / 2), Core.GetPercentage((int)canvas.ActualHeight, boundry)));
                        Canvas.SetLeft(image, 0 - image.Width);
                    }
                }
            }
        }

现在您将能够访问源属性,因为var“image”是一个Image