Geeks With Blogs
Light Up the Web Blog about programming in Silverlight

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

 

Posted on Sunday, March 21, 2010 12:06 AM | Back to top

Copyright © Jacek | Powered by: GeeksWithBlogs.net | Join free