【问题标题】:wpf fixeddocument dynamic datawpf 固定文档动态数据
【发布时间】:2012-04-12 22:54:48
【问题描述】:

我正在创建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);

    }

}

代码仍然给出 page1content 是另一个父级的子级的错误。

【问题讨论】:

    标签: c# wpf fixeddocument


    【解决方案1】:

    这是一个容易诊断的错误;视觉对象只能永远有一个父级,否则您将在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);
    }
    

    出于本示例的目的,我将Canvas 放在PageInit() 中。

    private Canvas PageInit()
    {
        var tb = new TextBlock();
        tb.Text = "From Data";
        var canvas = new Canvas();
        canvas.Children.Add(tb);
    
        return canvas;
    }
    

    【讨论】:

    • 现在对于“画布”给出了同样的错误,即该元素已经是另一个父元素的一部分。我用 Canvas canvas = new Canvas();画布=打印初始化();它的语法是否正确。
    • 由于您尚未发布 完整 代码示例,因此我无法进一步帮助您(我也不想)。我已经编辑了我的答案,以更清楚地解释这个问题。祝你好运。
    【解决方案2】:

    我做到了。解决方法如下

    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;
        }
    

    您可以跳过画布。这是我的项目的要求,所以我正在尝试。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-11-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-12
      相关资源
      最近更新 更多