Silverlight Programmatic Drawing (преобразование из Windows Forms в Silverlight) - PullRequest
4 голосов
/ 24 июля 2011

У меня есть Мир (PictureBox и Растровое изображение с размером (строки * столбцы) и я создаю Графику из Растрового изображения в Windows Forms), следующий код,

    bmp = new Bitmap(columns*32, rows*32);
    graphics = Graphics.FromImage(bmp);
    pictureBox1.Size = new Size(columns * 32, rows * 32);
    pictureBox1.Image = bmp;

это я использую для заполнения графики в форме Windows,

    private void drawImageInBox(Image src, int boxX, int boxY, int Offset = 0)
    {
        graphics.DrawImage(src, new Point((boxY * 32) + Offset, (boxX * 32) + Offset));
    }

и когда все операции выполнены, я просто обновляю PictureBox,

    pictureBox1.Refresh();

как мне добиться этого в Silverlight xaml?

1 Ответ

2 голосов
/ 24 июля 2011

Вам понадобится что-то вроде этого:

В вашем XAML:

<Grid x:Name="world_grid" Width="100" Height="100">
  <Grid.RowDefinitions>
    <RowDefinition Height="*" />   <!--Repeat this for however many rows you need -->
  </Grid.RowDefinitions>
  <Grid.ColumnDefinitions>
    <ColumnDefinition Width="*" /> <!--Same here, for columns-->
  </Grid.ColumnDefinitions>
</Grid>

В вашем коде:

for each image you need to add:
  Image img = new Image();
  img.Source = new Uri("some/dir/img.png"); // coding in-place, can't remember syntax
  world_grid.Children.Add(img);
  Grid.SetRow(img, 0); // places this image in row 0
  Grid.SetColumn(img, 5); // places this image in column 5

Очень важное примечание: каждый разВы «обновляете» свой «мир», убедитесь, что вы удалили соответствующие изображения перед повторным их добавлением!А еще лучше, вы можете просто отслеживать эти изображения в некотором массиве и изменять их строки / столбцы.И если вам нужно, вы можете установить видимость на изображениях скрытыми / свернутыми.

...