我是 C# 和 WPF 的新手,我正在尝试创建一个简单的汽车模拟器。模拟器的主要想法是我有 C# 类创建汽车对象,这些对象具有例如可以更改的速度变量和从左到右移动的计时器。我想用计时器做运动,而不是例如 doubleanimation
。在 WPF 中,我有 AddCarButton 用于在 Canvas 的某些点添加汽车。
问题是我不知道如何将汽车添加到 Canvas。这非常令人沮丧,因为这听起来不像是一件大事,但我觉得我已经尝试了一切但没有成功。
这是汽车类的最新尝试。我曾尝试使用 Canvas.Set 方法但失败了。
class car
{
private int speed;
public car(int s)
{
speed = s;
Bitmap bmp = new Bitmap(
System.Reflection.Assembly.GetEntryAssembly().
GetManifestResourceStream("MyProject.Resources.car.png"));
Graphics g = Graphics.FromImage(bmp);
//Canvas.SetBottom(g, 0);
//Canvas.SetLeft(g, 0);
//Canvas.SetBottom(bmp, 0);
//Canvas.SetLeft(bmp, 0);
}
public void addCar(car c)
{
Canvas.SetBottom(c, 0);
Canvas.SetLeft(c, 0);
}
最佳答案
如果您在 WPF 上编写代码,则不应使用 Windows 窗体 东西。要处理图像,您可以使用 BitmapSource 及其派生类,并以编程方式访问您的资源,您通常使用pack URIs。不过,这不是唯一的方法。
这是一个在 Canvas 控件上绘制一些图像的小示例。
Canvas 的 XAML 代码可能是这样的(这只是一个例子):
<Canvas Height="400" HorizontalAlignment="Left" Margin="0" Name="canvas1" VerticalAlignment="Top" Width="400" />
和你的主窗口代码...
public partial class MainWindow : Window
{
BitmapImage carBitmap = new BitmapImage(new Uri("pack://application:,,,/Images/BlueCar.png", UriKind.Absolute));
Image[] carImg = new Image[5];
Random rnd = new Random();
public MainWindow()
{
InitializeComponent();
double maxX = canvas1.Width - carBitmap.Width;
double maxY = canvas1.Height - carBitmap.Height;
for (int i = 0; i < carImg.Length; i++)
{
carImg[i] = new Image();
carImg[i].Source = carBitmap;
carImg[i].Width = carBitmap.Width;
carImg[i].Height = carBitmap.Height;
Canvas.SetLeft(carImg[i], rnd.NextDouble() * maxX);
Canvas.SetTop(carImg[i], rnd.NextDouble() * maxY);
canvas1.Children.Add(carImg[i]);
}
}
}
显然,您需要更改图像资源的名称。顺便说一下,要添加图像,请转到项目> 添加现有项目... 并选择您的图像文件,现在您的图像将出现在解决方案资源管理器中(默认情况下,Visual Studio 将图像资源存储在名为“Images”的文件夹中),如果您选择它,您将在Properties 窗口中看到它的Build action 是Resource,不要改变这个!(有些人认为应该是Embedded resource 但那是不正确)。
如果你没有得到这个new Uri("pack://application:,,,/Images/BlueCar.png", UriKind.Absolute)
,你应该阅读this link在打包 URI 上。
关于c# - 使用代码将图像对象添加到 wpf,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14336597/