WPF:使用DocumentPaginator手動將FlowDocument分頁

來源:互聯網
上載者:User

樣本程式可以根據使用者定義的大小,將一個文字檔分頁顯示。

 

這要得益於FlowDocument中的分頁器(DocumentPaginator)。WPF中的FlowDocument,FixedDocument和FixedDocumentSequence都有自己的分頁器。他們都繼承與IDocumentPaginatorSource介面,這個借口則返回一個分頁器對象DocumentPaginator。

 

FixedDocument和FixedDocumentSequence使用分頁器很好理解,因為他們本身就要按固定式頁面面大小顯示。而FlowDocument雖然是流動的,但是某些控制項FlowDocumentReader或者FlowDocumentPageViewer可以將他們按頁顯示,此時則用到FlowDocument的分頁器(DocumentPaginator)。那麼既然WPF內部控制項可以使用,我們也可以自己使用。

 

具體步驟如下:

  1. 通過PageWidth和PageHeight屬性設定FlowDocument大小
  2. 通過IDocumentPaginatorSource擷取DocumentPaginator
  3. 通過DocumentPaginator.ComputePageCount計算總頁數
  4. 擷取所有頁面的DocumentPage對象
  5. 通過DocumentPage.Visual和VisualBrush將頁面內容反映到介面上

 

當然,本例中,得先將TXT文本轉換成FlowDocument(將Run加入Paragraph中,然後將Paragraph加入FlowDocument中的Blocks屬性中)。

 

主要邏輯代碼:

UIElement[] PageFlowDoc(FlowDocument fdoc, double width, double height)

{

    //設定FlowDocument大小

    fdoc.PageWidth = width;

    fdoc.PageHeight = height;

    //擷取分頁器

    var paginator = ((IDocumentPaginatorSource)fdoc).DocumentPaginator;

    //計算總頁數

    paginator.ComputePageCount();

 

    var elements = new UIElement[paginator.PageCount];

 

    //擷取頁面

    for (int i = 0; i < elements.Length; i++)

    {

        var grid = new Grid();

        grid.Width = width;

        grid.Height = height;

 

        var visual = paginator.GetPage(i).Visual;

        var visualBrush = new VisualBrush(visual);

        grid.Background = visualBrush;

 

        elements[i] = grid;

    }

 

    return elements;

}

 

原始碼下載

注意:此為微軟SkyDrive存檔,請用瀏覽器直接下載,用某些下載工具可能無法下載

原始碼環境:Visual Studio 2010

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.