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

Reply via email to