2011-06-10 90 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

相關問題