我正试图在Silverlight中组建一个小型游戏引擎。
然而,我目前陷入了一个相当低级别的问题:能够在不同的位置绘制图像。我打算通过代码动态地执行此操作,因为从我看到的情况来看,XAML中的大多数内容往往都是静态的。
我已将基础'网格'更改为Canvas,相反,我可以在其上任意位置绘制。也许这不是一个坏主意,但我不知道。任何或所有建议都会有所帮助。
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
答案 0 :(得分:1)
应设置图像的依赖属性以在画布上定位图像。
第二名。当然,您的图像可以存储在Silverlight应用程序中。但是他们的构建操作应该设置为Embeded Resource。
img.Source = new BitmapImage(new Uri("/MyNameSpace;components/images/someimage.png", UriKind.Relative));
答案 1 :(得分:1)
XAML不一定是静态的。如果您将XAML与数据模型结合使用并使用数据绑定,那么XAML可以使用它。
您可以在画布上移动项目,您想要的是依赖项属性Canvas.Top
和Canvas.Left
here是一个关于简单动画的小教程,就像你描述的那样。如果你谷歌的“银光游戏教程”,你会发现大量的博客,文章和演示与源代码。
至于你其他无关的问题......你可以用你的应用程序嵌入图像。 here是访问文件和图像的大多数方法的良好来源
答案 2 :(得分:1)
我一直在使用基本用户界面的SL应用程序。根据我的小经验,我可以给你一些提示。
我已将基础'网格'更改为Canvas,相反,我可以 画在任何地方。不过,也许这是一个坏主意,......
我认为这是显而易见的选择。至于在画布上定位东西,从这个引用SL Layout - Absolute Layout
要基于绝对定位创建布局,必须替换 网格与画布。 ...要在Canvas上定位控件,请在控件上设置以下附加属性:Canvas.Left&amp; Canvas.Top
..是否可以使用Silverlight应用程序存储图像,如 没有通过URL加载它们?我知道这可能是,但是我 真的是要问,我会怎么做呢?
您可以随时将图像和形状保存在字典或smth中(因此在内存中),因此resizing the images(例如,当您下载完成时)可以避免过多的内存消耗。
这些是我想到的一些事情。祝你好运。
答案 3 :(得分:1)
使用Canvas代替Grid是一个好主意。如果您想要更改其子控件的位置
要将图像移动到点p,您可以通过以下方式执行此操作: