4

私は C# と WPF の初心者で、単純な自動車シミュレーターを作成しようとしています。シミュレーターの主なアイデアは、たとえば変更可能な速度変数と左から右に移動するためのタイマーを持つ車オブジェクトを作成する C# クラスがあることです。たとえば、タイマーではなく、タイマーで移動したいdoubleanimation。WPF には、Canvas の特定のポイントに車を追加するための AddCarButton があります。

問題は、Canvas に車を追加する方法がわからないことです。大したことではないように聞こえるので、これは非常にイライラしますが、私はすべてを試してみましたが、成功しなかったように感じます.

これはカークラスでの最新の試みです。Canvas.Set-methods を使用しようとしましたが、失敗しました。

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);
    }
4

2 に答える 2

3

WPF でコーディングしている場合は、Windows フォームのものを使用しないでください。画像を操作するには、 BitmapSourceとその派生クラスを使用し、プログラムでリソースにアクセスするには、通常、パック URIを使用します。ただし、それが唯一の方法ではありません。

キャンバス コントロールに画像を描画する小さな例を次に示します。

キャンバスの 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" というフォルダーに保存します)。を選択すると、[プロパティ]ウィンドウにBuild アクションResourceであることが表示されます。これを変更しないでください。(埋め込みリソースであるべきだと考える人もいますが、それは正しくありません)。

これを理解できない場合は、 pack URIに関するこのリンクnew Uri("pack://application:,,,/Images/BlueCar.png", UriKind.Absolute)を読む必要があります。

于 2013-01-15T22:24:44.523 に答える
1

ビットマップをImage(ではなくGraphics)に配置する必要があり、次に画像をキャンバスに追加する必要があります。

Canvas.Children.Add(image);
于 2013-01-15T11:31:07.173 に答える