What's the correct way to add a PageContent/ FixedPage to a FixedDocument in WPF?
Asked Answered
M

1

10

In WPF, in order to add a FixedPage to a FixedDocument in code one needs to:

var page = new FixedPage();
var pageContent = new PageContent();

((IAddChild)pageContent).AddChild(page);

This appears to be the only way, however:

  • The MSDN documentation explicitly says one shouldn't do this ('This API supports the .NET Framework infrastructure and is not intended to be used directly from your code.'- PageContent.IAddChild.AddChild Method).

  • It's ugly to have to cast to an explicit interface implementation in order to add the content to PageContent.

  • It's not simple to perform the basic operation of PageContent.

The documentation doesn't actually explain how to do this and I couldn't find any other information on how to do it. Is there another way? A 'correct' way?

Monro answered 7/3, 2013 at 9:36 Comment(0)
L
13

According to MSDN documentation, you simply add a FixedPage object to the PageContent.Child property and then add that to the FixedDocument by calling the FixedDocument.Pages.Add method.

For instance:

public FixedDocument RenderDocument() 
{
    FixedDocument fd = new FixedDocument();
    PageContent pc = new PageContent();
    FixedPage fp = new FixedPage();
    TextBlock tb = new TextBlock();

    //add some text to a TextBox object
    tb.Text = "This is some test text";
    //add the text box to the FixedPage
    fp.Children.Add(tb);
    //add the FixedPage to the PageContent 
    pc.Child = fp;
    //add the PageContent to the FixedDocument
    fd.Pages.Add(pc);

    return fd;
}
Linsang answered 9/4, 2013 at 19:16 Comment(7)
Thanks, where's the documentation?Monro
Check out the example at the bottom of this page: msdn.microsoft.com/en-us/library/…Linsang
when writing pc.Child it shows error. its a get method not setGilbertson
The MSDN documentation says the PageContent.Child property "Gets or sets the FixedPage associated with this PageContent." Here's the link: msdn.microsoft.com/en-us/library/…Linsang
The PageContent.Child property supports both get and set at .NET 4 but only get at .NET 3.5Nyaya
Try this:- ((System.Windows.Markup.IAddChild)pageContent).AddChild(fixedPage);Droughty
what about PageContent.Source ? "The <PageContent> element has a single required attribute, Source, which refers to a FixedPage part"Drawshave

© 2022 - 2024 — McMap. All rights reserved.