Silverlight以编程方式绘制(从Windows窗体转换为Silverlight)

时间:2011-07-24 11:22:44

标签: c# winforms silverlight bitmap picturebox

我有一个World(一个PictureBox和一个大小为(行*列)的位图,并在Windows窗体中从Bitmap创建图形)以下是代码,

    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 个答案:

答案 0 :(得分:2)

你会想要这样的东西:

在您的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

非常重要的一点:每次“刷新”“世界”时,请确保在重新添加之前删除相应的图像!更好的是,您可以在某些数组中跟踪这些图像,并更改其行/列。如果需要,可以将图像的可见性设置为隐藏/折叠。