2011-06-10 66 views
1

我想在Windows Phone应用程序中拥有动画全景控制背景。将WritableBitmap分配给ImageBrush.ImageSource属性

我有一个算法,不断地在WritableBitmap上绘制所需的图像。

我已经将Panorama的背景属性绑定到ViewModels的BackgroundImageBrush属性。

然后在我的ViewModel的施工时间我给你

BackgroundImageBrush = new ImageBrush {ImageSource = _outputWriteableBitmap}; 

我得到的输出没有绑定错误,当我在检查与调试器的结合,我得到BackgroundImageBrush.ImageSource正确连接到WritableBitmap 。

每次我重画_outputWriteableBitmap时,我都会调用Invalidate。

仍然我的全景背景是空白的!

我在理论上做错了什么?在Windows Phone的Panorama中甚至有可能拥有动画背景吗?

谢谢。

+0

你是否为'BackgroundImageBrush'激发'PropertyChanged'事件,以便你的UI知道它已经改变了? – ChrisF 2011-06-10 10:21:15

+0

是的,我愿意。但只有当我将WritableBitmap链接到ImageBrush的ImageSource属性时才会发生。 – 2011-06-10 12:54:33

+1

看看杰夫威尔科克斯实现衰落动画。它可能很有用:http://www.jeff.wilcox.name/2010/11/wp7-panorama-smooth-background-changing/ – keyboardP 2011-06-10 15:13:18

回答

0

在问题下面的评论中提供的一种方式有可能的答案。

This博客文章显示如何至少在运行时更改全景背景,艰难我没有管理让它播放运行时生成的动画。

0

这里的第一步是确保绑定实际上正常工作。尝试创建一个静态图像画笔,并绑定你的全景背景。如果可行,那么问题在于你更新图像的方式 - 无论是图像渲染不正确或者你没有正确地调用PropertyChanged

我已经将全景背景图像绑定到viewmodel中的属性之前,因此它是可行的。

顺便提一句,你多久更新一次这张图片?如果频繁发生,对您的表现可能会很残酷。

+0

这是一个实时动画,所以更新应该每33毫秒发生一次。我调用PropertyChanged来通知UI有关更新,但是我只在将WritableBitmap链接到画笔的ImageSource属性时执行此操作,而不是每次调用WritableBitmap上的.Invalidate()。 – 2011-06-10 12:53:58

+0

'PropertyChanged'可能只会在所有内容加载时调用一次。尽管如此,我会认为图像最初会显示,而不会正确更新。我仍然怀疑这种约束力。 每33毫秒刷新整个全景背景听起来像是会引起perf问题,但我从来没有尝试过。 – 2011-06-10 13:16:09

+0

这是我迄今观察到的:当我最初将ImageBitmap.ImageSource分配给BitmapImage(静态)时,我可以看到背景很好。但是,当我最初将它分配给WritableBitmap时,我既不能看到我的应用程序绘制的所需背景,也不能将其更改为BitmapImage。虽然我确信我已经通知UI关于这个事实,但它应该重新评估ImageBrush,但这个任务并没有效果。 – 2011-06-10 15:04:17

相关问题