Printing problem in Silverlight 4.0 RC - loading images in code behind
- by Jacek Ciereszko
Few days ago I faced a problem with printing in new Silverlight 4 RC. When you try to dynamically load image (in code behind) and print it, it doesn't work. Paper sheet is blank.
Problem
XAML file:
<Image x:Name="image" Stretch="None" />
XAML.cs:
image.Source = new BitmapImage(new Uri(imageUri, UriKind.RelativeOrAbsolute));
Print:
var pd = new PrintDocument();
pd.PrintPage += (s, args) =>
{
args.PageVisual = image;
};
pd.Print();
Result:
Blank paper.
Solution
What you need to do, is forced Silverlight engine to load that image before printing start. To accomplish that I proposed simply checking PixelWith value. Your code will ask about PixelWidth of image so it will have to be loaded.
XAML.cs:
BitmapImage bImage = new BitmapImage(new Uri(imageUri, UriKind.RelativeOrAbsolute));
image.Source = bImage;
InitControl(imageUri, movieUri, isLeft);
int w = bImage.PixelWidth;
int h = bImage.PixelHeight;
DONE!
Jacek Ciereszko