2011-01-07 15 views
1

muss ichAssign dynamisch generierte Bild ToggleButton.Content

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

Zum ToggleButton Hintergrund dynamisch generierte Bild setzen. Wenn ich der ToggleButton.Content-Eigenschaft ein generiertes Bild zuteile, sehe ich die Zeichenfolge "System.Drawing.Bitmap", nicht das Bild selbst. Es sieht so aus, als ob die ToString() - Methode für die Content-Eigenschaft verwendet wird. Wie kann ich ein generiertes Bild anzeigen?

+0

Ich glaube, Sie müssen den Standard-Control mit einem Ihrer eigenen außer Kraft setzen, dies zu tun ... oder herausfinden, ob die Togglebutton hat ein DataTemplate-Feld und verwendet stattdessen: p – Machinarius

Antwort

2

Wenn WPF keine geeigneten Konverter hat es nur Anrufe die ToString() Methode, das Bitmap-Format ist nicht geeignet, was wollen Sie in der Regel verwenden, ist ein Image mit einer Quelle, die ein BitmapImage ist, gibt es mehr Möglichkeiten, um Konvertierungen zwischen die verschiedenen Formate.
Hier ist eine Methode, die eine Umwandlung Bitmap-BitmapImage tut:

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; 
} 

Beachten Sie, dass ImageFormat.Png langsamer als unkomprimierte Formate aber es behält die Transparenz, wenn es irgendwelche gibt.
Jetzt sollten Sie in der Lage sein, dies als Quelle eines Bildsteuerelements und dieses Bildsteuerelement als Inhalt der Schaltfläche zu verwenden.

2

"Inhalt" -Eigenschaft betrifft, was Sie auf der Oberfläche des ToggleButton schreiben. Sie müssen die Eigenschaft "Hintergrund" des Oberflächenelements initialisieren. Hier ein Beispiel:

 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; 

ich das Bild erstellt mit dem folgenden Artikel http://msdn.microsoft.com/en-us/library/system.windows.media.imaging.bitmapsource(VS.85).aspx

Verwandte Themen