我必須把動態生成的圖像分配動態生成圖像ToggleButton.Content
var img = new Bitmap(..);
// draw something on img canvas ...
要切換按鈕的背景。當我將生成的圖像分配給ToggleButton.Content屬性時,我會看到「System.Drawing.Bitmap」字符串,而不是圖像本身。它看起來像ToString()方法用於Content屬性。我如何顯示生成的圖像呢?
我必須把動態生成的圖像分配動態生成圖像ToggleButton.Content
var img = new Bitmap(..);
// draw something on img canvas ...
要切換按鈕的背景。當我將生成的圖像分配給ToggleButton.Content屬性時,我會看到「System.Drawing.Bitmap」字符串,而不是圖像本身。它看起來像ToString()方法用於Content屬性。我如何顯示生成的圖像呢?
如果WPF不具有相應的轉換器,它只是調用ToString()
方法,位圖格式是不合適的,通常要使用什麼是Image
與作爲BitmapImage
,有幾種方法可以做到之間的轉換源不同的格式。
下面是一個方法,確實從Bitmap
到BitmapImage
的轉化:
public static BitmapImage BitmapToBitmapImage(System.Drawing.Bitmap bitmap)
{
MemoryStream ms = new MemoryStream();
bitmap.Save(ms, System.Drawing.Imaging.ImageFormat.Png);
BitmapImage bImg = new System.Windows.Media.Imaging.BitmapImage();
bImg.BeginInit();
bImg.StreamSource = new MemoryStream(ms.ToArray());
bImg.CreateOptions = BitmapCreateOptions.None;
bImg.CacheOption = BitmapCacheOption.Default;
bImg.EndInit();
ms.Close();
return bImg;
}
注意ImageFormat.Png
比未壓縮格式速度較慢,但它保留了透明性,如果有的話。
現在,您應該可以將其用作圖像控件的來源,並將此圖像控件用作按鈕的內容。
「內容」屬性與您在ToggleButton表面上編寫的內容有關。您需要初始化UI元素的「背景」屬性。這裏有一個例子:
PixelFormat pf = PixelFormats.Bgr32;
int width = 200;
int height = 200;
int rawStride = (width * pf.BitsPerPixel + 7)/8;
byte[] rawImage = new byte[rawStride * height];
// Initialize the image with data.
Random value = new Random();
value.NextBytes(rawImage);
// Create a BitmapSource.
BitmapSource bitmap = BitmapSource.Create(width, height, 96, 96, pf, null, rawImage, rawStride);
ImageBrush imgBrush = new ImageBrush(bitmap);
myToggleButton.Background = imgBrush;
我使用下面的文章http://msdn.microsoft.com/en-us/library/system.windows.media.imaging.bitmapsource(VS.85).aspx
我認爲你需要覆蓋默認控件模板用自己的一個做到這一點...或者,如果發現所創建的映像Togglebutton有一個DataTemplate字段,用它來代替:p – Machinarius 2011-01-07 23:13:42