以编程方式添加图像并将它们放置在WPF画布上

时间:2014-02-15 16:28:03

标签: c# wpf image canvas

我正在尝试编写一个C#WPF应用程序,它可以生成许多图像(代表行星),然后相对于彼此移动它们。我有一个标准的C#winform应用程序可以做到这一点,但我正在尝试将其转换为WPF,以便在快速移动图像时解决可怕的刷新问题。

我已经做了20多年的软件开发人员,已经使用.Net / C#工作了7年,但直到本周才开始使用WPF,而且我有点不知所措。

我有一个位图图像,我用于所有图像,现在需要以编程方式将任意数量的图像添加到画布,然后将它们放在设置位置。我目前必须添加每个图像的代码部分是

            string BodyName = "Body" + BodyCount.ToString();
            Image BodyImage = new Image
            {
                Width = moonBitmap.Width,
                Height = moonBitmap.Height,
                Name = BodyName,
                Source = new BitmapImage(new Uri(moonBitmap.UriSource.ToString(), UriKind.Relative)),
            };

            MainCanvas.Children.Add(BodyImage);
            MainCanvas.SetTop(BodyImage, NewBody.YPosition);
            MainCanvas.SetLeft(BodyImage, NewBody.XPosition);

(NewBody.YPosition和NewBody.XPosition都是双倍的。)

这看起来好像它会在画布上添加任意数量的图像。然而,SetTop和SetLeft方法,我认为我需要用来定位图像的方法将无法编译,我从intellisense得到以下消息

"Member 'System.Windows.Controls.Canvas.SetTop(System.Windows.UIElement,double)' cannot be accessed with an instance reference; qualify it with a type name instead."

作为WPF的新手,我认为我做的事情很愚蠢。谁能告诉我应该怎么做呢?

由于

1 个答案:

答案 0 :(得分:8)

SetTopSetLeftCanvas类的静态方法,您通过Canvas实例引用它们。尝试通过类名称引用这些方法:

Canvas.SetTop(BodyImage, NewBody.YPosition);
Canvas.SetLeft(BodyImage, NewBody.XPosition);