将动态生成的图像分配给ToggleButton.Content

时间:2011-01-07 23:07:46

标签: c# wpf togglebutton

我必须放置动态生成的图像

var img = new Bitmap(..);
// draw something on img canvas ...

到ToggleButton背景。当我将生成的图像分配给ToggleButton.Content属性时,我看到“System.Drawing.Bitmap”字符串,而不是图像本身。看起来ToString()方法用于Content属性。如何显示生成的图像?

2 个答案:

答案 0 :(得分:2)

如果WPF没有合适的转换器它只调用ToString()方法,则Bitmap格式不合适,您通常想要使用的是Image,其源为{{1 ,有几种方法可以在不同的格式之间进行转换 以下是一种从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; } 比未压缩格式慢,但如果有任何格式,它会保留透明度。
现在你应该能够将它用作Image控件的Source,并将此Image控件用作按钮的内容。

答案 1 :(得分:2)

“Content”属性与您在ToggleButton表面上所写的内容有关。您需要初始化UI元素的“Background”属性。这是一个例子:

        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

创建了图片