http://channel9.msdn.com/shows/SilverlightTV/Advanced-Silverlight-Printing-Strategies-Silverlight-TV-35/
On Thu, Jun 24, 2010 at 4:22 PM, <[email protected]> wrote: > Thanks Dan, > > Is there a predefined set of arguments that I pass in to Measure and > Arrange? > > Regards, > Tony > > > On Thu, Jun 24th, 2010 at 4:02 PM, [email protected] wrote: > > > Hey Tony, more info on what I meant: > > > > >> I believe this is happening because the bitmap does not render > > from a tab > > >> that has not been made > > >> visible prior to clicking Print. > > > > Your suspicions are correct. See > > http://msdn.microsoft.com/en-us/library/dd351483%28VS.95%29.aspx > > > > "During the measure pass of layout. The value for the Template > > property, if > > it has been set, will be expanded to provide the visual tree. The > > control is > > initially created without a visual tree, and the visual tree is > > cleared when > > the Template property is set." > > > > > > The key bit here: "... will be expanded to provide the visual > > tree.". > > > > See also http://forums.silverlight.net/forums/t/184562.aspx > > > > > > This is why I think you should just need to call Measure() and > > Arrange() on > > your additional (i.e. non visible) Tab Pages to expand their > > templates. You > > should be able to use the positional/width etc values from your > > visible > > Tab. > > > > Dan > > > > -------------------------------------------------- > > From: <[email protected]> > > Sent: Thursday, June 24, 2010 11:42 AM > > To: "ozSilverlight" <[email protected]> > > Subject: Re: Printing in Silverlight / Writing a bitmap that's not > > visible > > > > > Hi Tony, > > > > > > In WPF, (and I believe it is meant to be similar in Silverlight) > > these > > > sorts > > > of issues are usually fixed by coding a 2 pass layout update (i.e. > > calling > > > Measure() and Arrange()) on these objects that are > > not-yet-clicked-on to > > > get > > > them into the Visual Tree. > > > > > > Dan. > > > -------------------------------------------------- > > > From: <[email protected]> > > > Sent: Thursday, June 24, 2010 11:27 AM > > > To: <[email protected]> > > > Subject: Printing in Silverlight / Writing a bitmap that's not > > visible > > > > > >> Hi all, > > >> > > >> We have moved to Silverlight 4 due to the printing capability. I > > have > > >> been > > >> working on the best way > > >> to enable printing in my application. I have settled on writing > > page > > >> components to Bitmaps, then > > >> slotting those bitmaps into a page template control > > (printTemplate) and > > >> printing that. It's all been > > >> working fine except that now I have hit a problem. > > >> > > >> I have a tab control. The tab control has a number of tabs. When I > > click > > >> the Print button that I > > >> have added to the page, it works it's way through all the tabs and > > prints > > >> a report that contains the > > >> content. Now, it works fine if I have clicked on all the tabs > > >> before-hand, > > >> however if I do not click > > >> the tabs beforehand, then the content of those tabs will not get > > >> generated > > >> within the report. > > >> > > >> However, if I set the element directly into e.PageVisual, then the > > > > >> element > > >> will display. > > >> > > >> I believe this is happening because the bitmap does not render > > from a tab > > >> that has not been made > > >> visible prior to clicking Print. > > >> > > >> I have attached some code below and it is still a work in > > progress. Most > > >> of my printing involves > > >> Landscape orientation, and if I set it to Portrait, or set > > e.PageLayout = > > >> elementToPrint, then the > > >> element will clip, which is undesireable. > > >> > > >> How can I get an element to render inside a bitmap without the > > element > > >> needing to be visible first? > > >> > > >> Regards, > > >> Tony > > >> > > >> private void PrintPage(FrameworkElement elementToPrint, > > >> PrintPageEventArgs > > >> e, string > > >> headingTitle, string footerTitle, PageOrientation orientation = > > >> PageOrientation.Portrait) > > >> { > > >> PrintTemplateControl printTemplate = new > > PrintTemplateControl(); > > >> printTemplate.SetHeaderAndFooterText(headingTitle, > > footerTitle); > > >> > > >> double printableHeight = e.PrintableArea.Height - > > >> printTemplate.HeightOffset; > > >> int contentWidth = > > Convert.ToInt32(elementToPrint.ActualWidth); > > >> int contentHeight = > > Convert.ToInt32(elementToPrint.ActualHeight); > > >> WriteableBitmap bitmap; > > >> if (orientation == PageOrientation.Portrait) > > >> { > > >> bitmap = new WriteableBitmap(contentWidth, contentHeight); > > >> bitmap.Render(elementToPrint,new TranslateTransform()); > > >> } > > >> else > > >> { > > >> bitmap = new WriteableBitmap(contentHeight, contentWidth); > > >> TransformGroup transformGroup = new TransformGroup(); > > >> RotateTransform rotateTransform = new RotateTransform(); > > >> rotateTransform.Angle = 90; > > >> transformGroup.Children.Add(rotateTransform); > > >> TranslateTransform moveTransform = new > > TranslateTransform(); > > >> moveTransform.X = contentHeight; > > >> transformGroup.Children.Add(moveTransform); > > >> ScaleTransform scaleTransform = new ScaleTransform(); > > >> double ratioOfImageToPrintArea = 1; > > >> if (elementToPrint.ActualWidth > printableHeight) > > >> ratioOfImageToPrintArea = printableHeight / > > >> elementToPrint.ActualWidth; > > >> scaleTransform.ScaleX = ratioOfImageToPrintArea; > > >> scaleTransform.ScaleY = ratioOfImageToPrintArea; > > >> transformGroup.Children.Add(scaleTransform); > > >> bitmap.Render(elementToPrint, transformGroup); > > >> } > > >> bitmap.Invalidate(); > > >> > > >> Image printImageSource = new Image(); > > >> printImageSource.Source = bitmap; > > >> printImageSource.Width = bitmap.PixelWidth; > > >> printImageSource.Height = bitmap.PixelHeight; > > >> > > >> printTemplate.AddChildren(printImageSource); > > >> > > >> e.PageVisual = printTemplate; > > >> } > > >> > > >> > > >> _______________________________________________ > > >> ozsilverlight mailing list > > >> [email protected] > > >> http://prdlxvm0001.codify.net/mailman/listinfo/ozsilverlight > > >> > > > _______________________________________________ > > > ozsilverlight mailing list > > > [email protected] > > > http://prdlxvm0001.codify.net/mailman/listinfo/ozsilverlight > > > > > _______________________________________________ > > ozsilverlight mailing list > > [email protected] > > http://prdlxvm0001.codify.net/mailman/listinfo/ozsilverlight > > > > > > > > > > _______________________________________________ > ozsilverlight mailing list > [email protected] > http://prdlxvm0001.codify.net/mailman/listinfo/ozsilverlight >
_______________________________________________ ozsilverlight mailing list [email protected] http://prdlxvm0001.codify.net/mailman/listinfo/ozsilverlight
