基本的にWindows 8系の頃と変わってません。
OnNavigatedToで印刷系各種準備を行います。一見無意味に見えるPrintDocumentSourceの取得も意味があるので写経しましょう。
private PrintDocument printDocument; private IPrintDocumentSource printDocumentSource; public MainPage() { this.InitializeComponent(); } protectedoverridevoid OnNavigatedTo(NavigationEventArgs e) { base.OnNavigatedTo(e); this.printDocument = new PrintDocument(); this.printDocumentSource = this.printDocument.DocumentSource; this.printDocument.GetPreviewPage += this.PrintDocument_GetPreviewPage; this.printDocument.Paginate += this.PrintDocument_Paginate; this.printDocument.AddPages += this.printDocument_AddPages; PrintManager.GetForCurrentView().PrintTaskRequested += this.MainPage_PrintTaskRequested; }
GetPreviewPageがプレビューページの表示処理で、Paginateが、ページの中身を作る処理とページ数を確定するところで、AddPagesが印刷する表示を持ったUIElementを実際に印刷処理に渡すところです。そして、PrintTaskRequestedイベントハンドラを登録して印刷の準備完了です。
各種イベントハンドラの中身は以下のような感じになります。画面にImageという名前のImageコントロールを置いていて、それを印刷するコードになっています。
privatevoid printDocument_AddPages(object sender, AddPagesEventArgs e) { // 印刷(複数ページあるときはAddPageを複数回呼ぶ)this.printDocument.AddPage(this.Image); this.printDocument.AddPagesComplete(); } privatevoid PrintDocument_Paginate(object sender, PaginateEventArgs e) { // ここで印刷コンテンツを作ってページ数を設定するthis.printDocument.SetPreviewPageCount(1, PreviewPageCountType.Intermediate); } privatevoid PrintDocument_GetPreviewPage(object sender, GetPreviewPageEventArgs e) { // プレビューを表示するthis.printDocument.SetPreviewPage(e.PageNumber, this.Image); } privatevoid MainPage_PrintTaskRequested(PrintManager sender, PrintTaskRequestedEventArgs args) { // プリントのタスクを登録する args.Request.CreatePrintTask("Sample", req => { req.SetSource(this.printDocumentSource); }); }
最後にボタンのクリックとかで印刷のUIを呼び出しましょう。
private async void Button_Click(object sender, RoutedEventArgs e) { await PrintManager.ShowPrintUIAsync(); }
これで印刷プレビューが表示されて実際に印刷がされます。
複数ページあるようなアプリでは、別画面に行くときとかにプリンタとの接続を切っておきます。
protectedoverridevoid OnNavigatedFrom(NavigationEventArgs e) { base.OnNavigatedFrom(e); PrintManager.GetForCurrentView().PrintTaskRequested -= this.MainPage_PrintTaskRequested; }