c# - 使用代码将图像对象添加到 wpf

标签 c# wpf simulator

我是 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 actionResource不要改变这个!(有些人认为应该是Embedded resource 但那是不正确)。

如果你没有得到这个new Uri("pack://application:,,,/Images/BlueCar.png", UriKind.Absolute),你应该阅读this link打包 URI 上。

关于c# - 使用代码将图像对象添加到 wpf,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14336597/

相关文章:

iphone - 如何浏览iPhone模拟器

java - 使用 Apache Spark 运行运动模拟

c# - 什么是 contentType 和 dataType 以及 jQuery ajax Post 中的数据?

c# - XNA 游戏在 "dragging"窗口时不更新,任何事件处理程序?

wpf - 如何使用 Textbox.Style 应用 StaticResource

c# - List<> 不在 DispatcherTimer 中更新

.net - 如何继承WPF风格的Button行为?

testing - Web 应用程序的模拟器或测试环境

c# - 在 C# 中使用 StringBuilder 构造 HTML 的问题

c# - 如何在 .NET 程序集中嵌入文本文件?