Определить, превышает ли содержание на FixedPage нижнюю границу

Я создаю документ, который я хотел бы напечатать позже. Этот документ должен содержать сетку, в которой перечислены элементы, такие как таблица, включая строку заголовка. Количество элементов варьируется, и поэтому возможно, что сетка превышает нижнюю границу одной страницы. Когда это произойдет, я хотел бы продолжить на второй странице, заголовок "таблицы" должен быть на нем снова. Я добавляю строки программно в цикле for.

Вы знаете, как определить, превышена ли граница нижней страницы? Может быть, есть другой подход.

1 ответ

Решение

Решение состоит в том, чтобы использовать StackPanel в качестве "корневого потомка" для каждой FixedPage. Затем я могу добавить контент и измерить его.

public StackPanel AddNewPage()
{
    PageContent pC = new PageContent();
    FixedPage fP = new FixedPage { Width = PageWidth, Height = PageHeight, Margin = Margin };

    StackPanel sP = new StackPanel { Width = PageWidth - Margin.Left - Margin.Right };
    fP.Children.Add(sP);

    pC.Child = fP;

    //FixedDocument
    Document.Pages.Add(pC);

    //used later to add content to the page 
    return sP;
}

public bool IsPageOverfilled(int pageIndex)
{
    StackPanel sP = (Document.Pages[pageIndex].Child as FixedPage).Children[0] as StackPanel;
    //necessary to recognize new added elements
    sP.UpdateLayout();
    sP.Measure(new Size(double.PositiveInfinity, double.PositiveInfinity));

    if (sP.DesiredSize.Height > MaxPageContentHeight)
        return true;
    else return false;
}

MaxPageContentHeight определяется следующим образом:

double MaxPageContentHeight = PageHeight - Margin.Top - Margin.Bottom;
Другие вопросы по тегам