2011-11-16 1 views
0

J'essaie de faire un Image sur un de mes Canvas (myPrintingCanvas). Mais la Largeur de l'image devient au moins deux fois plus large que le Canevas, et l'espace supplémentaire créé est de retour. Si j'essaie sur un autre Canavas (LayoutRoot), cela fonctionne comme prévu.WriteableBitmap ajoutant un remplissage noir à droite

Mon observation est que sur myPrintingCanvas l'ActualWidth est toujours 0. LayoutRoot a un ActualWidth correct. Je ne sais pas si cela a quelque chose à voir avec le rembourrage supplémentaire, et j'ai échoué à obtenir le ActualWidth pour myPrintingCanvas (en utilisant UpdateLayout et Measure).

code:

//Code to render the content of myPrintingCanvas 
... 

//Make the WriteableBitmap 
WriteableBitmap myWriteableBitmap = new WriteableBitmap(myPrintingCanvas, null); 

Répondre

0

Avez-vous essayé de créer la WriteableBitmap avec une taille fixe et appelant sa méthode Render pour rendre le bitmap? Canvas a des comportements étranges car il is an anti-pattern dans Silverlight et WPF et brise de nombreuses règles de mise en page. Le code pour la création d'une taille fixe WriteableBitmap et rendu à lui ressemblerait à quelque chose comme ceci:

 int width = 640; 
     int height = 480; 
     WriteableBitmap bmp = new WriteableBitmap(width, height); 
     bmp.Render(myPrintingCanvas, null); 
     bmp.Invalidate(); 

Un avantage de cette technique est que si vous avez besoin de saisir plusieurs images que vous pouvez réutiliser le même WriteableBitmap au lieu de recréer chaque temps.