2010-09-16 83 views
3

我有一個ScrollViewer和非常「長」的內容。 我寫了一個繼承自DocumentPaginator的類,但我不明白如何爲此Visual的每個部分創建一個「框架」?我的意思是,我如何「看」下一頁的控制? 我想這一點,但沒有成功:如何在WPF中打印視覺與分頁?

public override DocumentPage GetPage(int pageNumber) 
    { 
     double left = pageNumber * pageSize.Width; 
     Point pt = new Point(left, 0); 

     visual.RenderTransform = Transform.Identity; 
     visual.RenderTransform = new TranslateTransform(-left, 0); 

     visual.Measure(pageSize); 
     visual.Arrange(new Rect(visual.DesiredSize)); 

     DocumentPage page = new DocumentPage(visual); 
     return page; 
    } 

有了這個代碼,我得到的第一頁,因爲它應該是,第二頁是酷似首先,和所有其餘的頁面是空白。

回答

1

DocumentPaginator非常棘手。以下是幫我正確估計頁大小,並確保沒有空白頁來幾個步驟:

覆蓋這兩個屬性IsPageCountValidPageCount爲:

public override bool IsPageCountValid 
    { 
     get { return true; } 
    } 

public override int PageCount 
{ 
    get 
    { 
     if (pageCount == 0) 
     { 
      this.ComputePageCount(); 
     } 
     return pageCount; 
    } 
} 

使用一個私人函數ComputePageCount來做你的頁面大小計算(把你的頁面分成確切的頁面數量a根據指定的單個pageSize)。

的關鍵,所有的頁面次數運算能力在這裏設置

IsPageCountValid =真

那麼這將始終確保分頁程序使用您的重寫的方法來計算頁數。

可以通過設置DocumentPaginator.PageSize屬性來指定單個頁面大小。

考慮到每頁中的所有頁眉/頁腳。大多數空白/少頁面是錯誤PageCount計算的結果。