2013-01-15 2 views
3

Я новичок в C# и WPF, и я пытаюсь создать простой симулятор автомобиля. Главным образом идея симулятора состоит в том, что у меня есть класс C#, который создает автообъекты, которые имеют, например, переменную скорости, которую можно изменить, и таймер для перемещения слева направо. Я хочу сделать движение с таймером, а не, например, doubleanimation. В WPF у меня есть AddCarButton для добавления автомобилей в определенные пункты в Canvas.Добавление объектов изображения в wpf с кодом

Проблема в том, что я не знаю, как добавить автомобили в 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); 
    } 
+0

У вашего изображения есть доступ к ресурсам, поэтому почему бы не получить доступ к нему обычным способом с помощью свойств. Ресурсы. вместо того, чтобы использовать отражение, чтобы извлечь его? – dutzu

+0

Перед началом кода прочитайте как минимум [Обзор обработки изображений] (http://msdn.microsoft.com/en-us/library/ms748873.aspx). – Clemens

ответ

0

Вы должны поставить растровый в Image (а не Graphics), а затем вам нужно, чтобы добавить изображение на холст:

Canvas.Children.Add(image); 
+0

@Sam 'Image' здесь означает [Управление изображениями WPF] (http://msdn.microsoft.com/en-us/library/system.windows.controls.image.aspx), а растровое изображение не является« Системой ». Drawing.Bitmap' вы использовали, но могли бы быть [BitmapImage] (http://msdn.microsoft.com/en-us/library/system.windows.media.imaging.bitmapimage.aspx). – Clemens

3

Если вы кодирование на WPF вы не должны 't use Windows Forms. Для работы с изображениями вы используете 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]); 
     } 
    } 
} 

Очевидно, что вам нужно изменить имя ваш ресурс изображения. Кстати, чтобы добавить изображение, перейдите по ссылке Проект>Добавить существующий элемент ... и выбрать файл с изображениями, теперь ваше изображение появится в окне Solution explorer (по умолчанию Visual Studio хранит ресурсы изображений в папка под названием «Images»), если вы его выберете вы увидите в Свойства окно, его Сложение действие является ресурсов, не изменить! (некоторые считают, что это должно быть Вложенный ресурс, но это неверно).

Если вы не получите эту new Uri("pack://application:,,,/Images/BlueCar.png", UriKind.Absolute), вы должны прочитать this link на пакет URIs.

+1

Спасибо за ваш ответ, но у меня все еще возникают проблемы с добавлением автомобилей на холст. Для команды «Canvas.SetLeft (car (...« Я получаю ошибку »не могу конвертировать из« Simulator.car »в« System.Windows.UIElement »). Как я могу сделать свой класс car-class как UIElement или преобразовать его для UIElement, чтобы его можно было добавить? – Sam

Смежные вопросы