C# wpf固定文档动态数据

C# wpf固定文档动态数据,c#,wpf,fixeddocument,C#,Wpf,Fixeddocument,我正在创建FixedDocument并动态向其中添加页面 public partial class Window1 : Window { FixedDocument fd = new FixedDocument(); TextBlock page1Text = new TextBlock(); public Window1() { InitializeComponent(); } private void Print_Click

我正在创建
FixedDocument
并动态向其中添加页面

public partial class Window1 : Window
{
    FixedDocument fd = new FixedDocument();
    TextBlock page1Text = new TextBlock();

    public Window1()
    {
        InitializeComponent();
    }

    private void Print_Click(object sender, RoutedEventArgs e)
    {
        PrintDialog pd = new PrintDialog();


        fd.DocumentPaginator.PageSize = new Size(pd.PrintableAreaWidth, pd.PrintableAreaHeight);

        for (int i = 0; i <= 5; i++)
        {
            FixedPage page1 = new FixedPage();
            page1.Width = fd.DocumentPaginator.PageSize.Width;
            page1.Height = fd.DocumentPaginator.PageSize.Height;

            pages();
            page1.Children.Add(page1Text);
            PageContent page1Content = new PageContent();
            ((IAddChild)page1Content).AddChild(page1);
            fd.Pages.Add(page1Content);
        }

        DocumentViewer dr = new DocumentViewer();
        dr.Height = 700;
        dr.Document =fd;

        stack.Children.Add(dr);


    }

    private void pages()
    {
        page1Text.Text = "This is a test";
        page1Text.FontSize = 40;
        page1Text.Margin = new Thickness(96);

    }

}
公共部分类窗口1:窗口
{
FixedDocument fd=新的FixedDocument();
TextBlock page1Text=新建TextBlock();
公共窗口1()
{
初始化组件();
}
私有作废打印\单击(对象发送者,路由目标e)
{
PrintDialog pd=新建PrintDialog();
fd.DocumentPaginator.PageSize=新尺寸(pd.PrintableAreaWidth,pd.PrintableAreaHeight);

对于(int i=0;i这是一个很容易诊断的错误;一个可视化对象只能有一个父对象,否则您将在
VisualTree
中有一个循环依赖项。请查看您的代码以检查您是否使用同一个可视化对象两次

如果希望视觉效果同时出现在两个位置,则需要复制它;如果第二次使用是有意的,则可以通过从父视觉效果中移除自身来取消父视觉效果。例如(
canvas.parent.Remove(canvas)

在发布的代码示例中,我可以确定至少一个发生这种情况的实例,并在下面详细说明


您在
while(loop)
块中将
vCanvas
的实例添加到多个。您需要为每个迭代创建一个新的
Canvas

var visual = /* unknown */;
var fd = new FixedDocument();   
while(loop)
{
    var canvas = PageInit();
    var page = new FixedPage();
    page.Width = visual.DocumentPaginator.PageSize.Width;
    page.Height = visual.DocumentPaginator.PageSize.Height;
    page.Children.Add(canvas);

    PageContent pageContent = new PageContent();
    ((IAddChild)pageContent).AddChild(page);
    visual.Pages.Add(pageContent);
}
在本例中,我将在
PageInit()
中打开
画布


我做到了。解决办法如下

private void Print_Click(object sender, RoutedEventArgs e)
    {
        PrintDialog pd = new PrintDialog();


fd.DocumentPaginator.PageSize = new Size(pd.PrintableAreaWidth,fd.PrintableAreaHeight);

        for (int i = 0; i <= 5; i++)
        {
            FixedPage page1 = new FixedPage();
            page1.Width = fd.DocumentPaginator.PageSize.Width;
            page1.Height = fd.DocumentPaginator.PageSize.Height;

            UIElement page1Text = pages();
            page1.Children.Add(page1Text);
            PageContent page1Content = new PageContent();
            ((IAddChild)page1Content).AddChild(page1);
            fd.Pages.Add(page1Content);
        }

        DocumentViewer dr = new DocumentViewer();
        dr.Height = 700;
        dr.Document =fd;

        stack.Children.Add(dr);


    }

    private UIElement pages()
    {
        Canvas pcan = new Canvas();

        TextBlock page1Text = new TextBlock();
        page1Text.Text = "This is a test";
        page1Text.FontSize = 40;
        page1Text.Margin = new Thickness(96);

        pcan.Children.Add(page1Text);


        return pcan;
    }
private void打印\u单击(对象发送方,路由目标)
{
PrintDialog pd=新建PrintDialog();
fd.DocumentPaginator.PageSize=新尺寸(pd.可打印区域宽度,fd.可打印区域高度);

对于(int i=0;i),对于“canvas”,它现在给出了相同的错误,即该元素已经是另一个父元素的一部分。我使用了canvas canvas=new canvas();canvas=printinit();它的语法是否正确。由于您尚未发布完整的代码示例,我无法进一步帮助您(我也不想).我已经编辑了我的答案,以便更清楚地解释这个问题。祝你好运。
private void Print_Click(object sender, RoutedEventArgs e)
    {
        PrintDialog pd = new PrintDialog();


fd.DocumentPaginator.PageSize = new Size(pd.PrintableAreaWidth,fd.PrintableAreaHeight);

        for (int i = 0; i <= 5; i++)
        {
            FixedPage page1 = new FixedPage();
            page1.Width = fd.DocumentPaginator.PageSize.Width;
            page1.Height = fd.DocumentPaginator.PageSize.Height;

            UIElement page1Text = pages();
            page1.Children.Add(page1Text);
            PageContent page1Content = new PageContent();
            ((IAddChild)page1Content).AddChild(page1);
            fd.Pages.Add(page1Content);
        }

        DocumentViewer dr = new DocumentViewer();
        dr.Height = 700;
        dr.Document =fd;

        stack.Children.Add(dr);


    }

    private UIElement pages()
    {
        Canvas pcan = new Canvas();

        TextBlock page1Text = new TextBlock();
        page1Text.Text = "This is a test";
        page1Text.FontSize = 40;
        page1Text.Margin = new Thickness(96);

        pcan.Children.Add(page1Text);


        return pcan;
    }