我的場景如下。我爲我的兒子創建了一個小數學測驗應用程序,並希望在每個問題得到回答後動態更改畫布的背景ImageBrush。我開始將我的圖像(pngs)嵌入到資源文件中,並且認爲我會將它們加載到數組中,然後隨機選擇一個並將其加載到畫布中。如何在運行時更改WPF中的Canvas背景?
我碰到的第一個問題當然是在資源文件中圖像被存儲爲位圖。所以經過一些在互聯網上四處尋找,我終於想通了,如何讓他們從位圖轉換使用下面的輔助方法的BitmapImage對象:
private BitmapImage FromResourceBitmap(Bitmap bitmap)
{
var result = new BitmapImage();
using(var stream = new MemoryStream())
{
bitmap.Save(stream, ImageFormat.Png);
stream.Position = 0;
result.BeginInit();
result.StreamSource = stream;
result.EndInit();
}
return result;
}
從那裏我創建從BitmapImage的一個圖像刷,並將其分配給背景畫布的屬性:
var brush = new ImageBrush {ImageSource = m_Media.Screens[0]}; // m_Media.Screens[x] returns a BitmapImage...obviously.
QuestionCanvas.Background = brush;
不幸的是,這似乎並不奏效。當應用程序運行時,背景是純白色的。我的XAML沒有描述任何背景,並且......我很困惑。任何幫助將不勝感激!謝謝!
如果在更改背景屬性後嘗試調整窗口大小,會發生什麼情況?我的直覺認爲這是一個更新的問題。除此之外,該方法可能有問題。嘗試使用靜態資源首先工作,一旦這是堅實的,你可以試着直接從方法中做到這一點? – keyle 2010-07-03 07:49:03
這就是我最初的想法。我曾嘗試調用任何「無效」方法來重繪,但沒有發生任何事情。調整大小,最小化,最大化等等,也沒有做任何事情。不過,我想我已經想清楚了,並會在幾分鐘後發佈答案。 – Mateo 2010-07-03 22:02:10