C# 在Silverlight中在画布上动态绘制图像

C# 在Silverlight中在画布上动态绘制图像,c#,.net,silverlight,image,dynamic,C#,.net,Silverlight,Image,Dynamic,我试图在Silverlight中组装一个小游戏引擎 然而,我目前被困在一个较低层次的问题上:在不同位置绘制图像的能力。我打算通过代码动态地实现这一点,因为从我所看到的情况来看,XAML中的大部分内容都趋向于某种程度上是静态的 我把基本的“网格”改成了画布,这样我就可以在上面的任何地方画画了。也许这是个坏主意,但我不知道。任何或所有的建议都会有帮助 InitializeComponent(); Image img = new Image(); img

我试图在Silverlight中组装一个小游戏引擎

然而,我目前被困在一个较低层次的问题上:在不同位置绘制图像的能力。我打算通过代码动态地实现这一点,因为从我所看到的情况来看,XAML中的大部分内容都趋向于某种程度上是静态的

我把基本的“网格”改成了画布,这样我就可以在上面的任何地方画画了。也许这是个坏主意,但我不知道。任何或所有的建议都会有帮助

        InitializeComponent();
        Image img = new Image();
        img.Source = new BitmapImage(new Uri("Generic URL here"));
        ((BitmapImage)(img.Source)).DownloadProgress += new System.EventHandler<DownloadProgressEventArgs>(TestEventHandler);

        Rect position = new Rect(new Point(25, 25), img.RenderSize);

        LayoutRoot.Children.Add(img);
        img.Arrange(position);
我最初的尝试,上面,是使用排列功能,上面,将图像“移动”到一个新位置。然而,我不知道这是如何工作的,当我编写上述代码时,图像不再显示在屏幕上

一个不相关的问题:是否可以使用Silverlight应用程序存储图像,而不通过URL加载它们?我知道可能是这样,但我真正想问的是,我会怎么做

谢谢大家的帮助


-应设置图像的Stefan Zuefeldt

依赖属性,以便在画布上定位图像

,

第二。当然,您可以将图像存储在Silverlight应用程序中。但它们的构建操作应该设置为嵌入资源

img.Source = new BitmapImage(new Uri("/MyNameSpace;components/images/someimage.png", UriKind.Relative));

应设置图像的Dependency属性以在画布上定位图像

,

第二。当然,您可以将图像存储在Silverlight应用程序中。但它们的构建操作应该设置为嵌入资源

img.Source = new BitmapImage(new Uri("/MyNameSpace;components/images/someimage.png", UriKind.Relative));

XAML不必是静态的。如果您将XAML与数据模型结合起来并使用数据绑定,那么XAML可以很好地使用

您可以在画布上移动项目,您需要的是依赖项属性canvas.Top和canvas.Left

这是一个关于简单动画的小教程,如您所描述的。如果你在谷歌上搜索silverlight游戏教程,你会发现大量的博客、文章和源代码演示

至于你另一个无关的问题。。。您可以在应用程序中嵌入图像。
是访问文件和图像的大多数方法的良好来源

XAML不必是静态的。如果您将XAML与数据模型结合起来并使用数据绑定,那么XAML可以很好地使用

您可以在画布上移动项目,您需要的是依赖项属性canvas.Top和canvas.Left

这是一个关于简单动画的小教程,如您所描述的。如果你在谷歌上搜索silverlight游戏教程,你会发现大量的博客、文章和源代码演示

至于你另一个无关的问题。。。您可以在应用程序中嵌入图像。
是访问文件和图像的大多数方法的良好来源

我已经在使用基本UI的SL应用程序上工作了一段时间。根据我的小经验,我可以给你一些提示

我已经将基础“网格”改为画布,这样我就可以 在上面画任何地方。也许这是个坏主意,不过

我认为这是显而易见的选择。至于在画布上定位的东西,从这个参考

若要基于绝对定位创建布局,必须替换 网格与画布。。。要在画布上定位控件,请在控件上设置以下附加属性:Canvas.Left&Canvas.Top

。。是否可以使用Silverlight应用程序存储图像 不通过URL加载它们?我知道可能是这样,但我 我真的想问,我会怎么做

您可以始终将图像和形状保存在词典或smth中,从而将其保存在内存中。因此,当您的下载完成时,例如,可以节省过多的内存消耗


这些是我想到的一些事情。祝你好运。

一段时间以来,我一直在使用基本UI开发SL应用程序。根据我的小经验,我可以给你一些提示

我已经将基础“网格”改为画布,这样我就可以 在上面画任何地方。也许这是个坏主意,不过

我认为这是显而易见的选择。至于在画布上定位的东西,从这个参考

若要基于绝对定位创建布局,必须替换 网格与画布。。。要在画布上定位控件,请在控件上设置以下附加属性:Canvas.Left&Canvas.Top

。。是否可以使用Silverlight应用程序存储图像 不通过URL加载它们?我知道可能是这样,但我 我真的想问,我会怎么做

您可以始终将图像和形状保存在词典或smth中,从而将其保存在内存中。因此,当您的下载完成时,例如,可以节省过多的内存消耗

这些是我想到的一些事情。祝你好运

使用画布代替网格是个好主意。画布优于网格,以防您想要更改其子对象的位置 n控制

要将图像移动到点p,可以通过以下方式执行:

将图像添加到画布 调用Canvas.SetLeftimg,p.X和Canvas.SetTopimg,p.Y 如果您想将图像添加到xap,您可以轻松地将图像添加到project,并将图像的生成类型设置为Content默认值为None或Resource,我不确定,然后使用相对url:img.Source=new BitmapImagenew Uri/tmp.jpg,UriKind.relative; 使用画布代替网格是个好主意。画布优于网格,以防您想要更改其子控件的位置

要将图像移动到点p,可以通过以下方式执行:

将图像添加到画布 调用Canvas.SetLeftimg,p.X和Canvas.SetTopimg,p.Y 如果您想将图像添加到xap,您可以轻松地将图像添加到project,并将图像的生成类型设置为Content默认值为None或Resource,我不确定,然后使用相对url:img.Source=new BitmapImagenew Uri/tmp.jpg,UriKind.relative;