2016-05-30 20 views
0

我有一個MapControl正在創建我的路線。現在,我只需要弄清楚一種打印方式。使用UWP打印樣本,我得到一個黑盒子,控件應該在那裏。正在構建地圖和路線,只是在打印預覽中沒有正確渲染。我以爲我看到一個MapControl.Print ...但我認爲這是在Bing.Maps的東西。任何指針將不勝感激。謝謝。需要打印帶有路線結果的UWP MapControl

回答

0

使用UWP打印樣本,我得到一個黑盒子,控件應該在那裏。

看來MapControl無法打印。

作爲一個工作周,我們可以使用RenderTargetBitmapMapControl獲取圖片。我們可以打印圖像。

使用RenderTargetBitmap,可以完成各種方案,例如應用圖像效果的視覺最初從XAML UI組成傳來,生成子頁面的縮略圖的導航系統,或使用戶能夠節省的部分用戶界面作爲圖像源,然後與其他應用程序共享該圖像。

由於RenderTargetBitmap是ImageSource的子類,因此它可以用作圖像元素或ImageBrush畫筆的圖像源。

欲瞭解更多信息,請參閱RenderTargetBitmap

例如:

RenderTargetBitmap renderTargetBitmap = new RenderTargetBitmap(); 
await renderTargetBitmap.RenderAsync(MyMap); 
MyImage.Source = renderTargetBitmap; 

印刷代碼:

public sealed partial class MainPage : Page 
{ 
    private PrintManager printmgr = PrintManager.GetForCurrentView(); 
    private PrintDocument printDoc = null; 
    private PrintTask task = null; 

    public MainPage() 
    { 
     this.InitializeComponent(); 

     printmgr.PrintTaskRequested += Printmgr_PrintTaskRequested; 
    } 

    private void Printmgr_PrintTaskRequested(PrintManager sender, PrintTaskRequestedEventArgs args) 
    { 
     var deferral = args.Request.GetDeferral(); 

     task = args.Request.CreatePrintTask("Print", OnPrintTaskSourceRequrested); 
     task.Completed += PrintTask_Completed; 
     deferral.Complete(); 
    } 

    private void PrintTask_Completed(PrintTask sender, PrintTaskCompletedEventArgs args) 
    { 
     //the PrintTask is completed 
    } 

    private async void OnPrintTaskSourceRequrested(PrintTaskSourceRequestedArgs args) 
    { 
     var def = args.GetDeferral(); 
     await Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, 
     () => 
      { 
       args.SetSource(printDoc?.DocumentSource); 
      }); 
     def.Complete(); 
    } 

    private async void appbar_Printer_Click(object sender, RoutedEventArgs e) 
    { 
     if (printDoc != null) 
     { 
      printDoc.GetPreviewPage -= OnGetPreviewPage; 
      printDoc.Paginate -= PrintDic_Paginate; 
      printDoc.AddPages -= PrintDic_AddPages; 
     } 
     this.printDoc = new PrintDocument(); 

     printDoc.GetPreviewPage += OnGetPreviewPage; 

     printDoc.Paginate += PrintDic_Paginate; 

     printDoc.AddPages += PrintDic_AddPages; 

     bool showPrint = await PrintManager.ShowPrintUIAsync(); 
    } 

    private void PrintDic_AddPages(object sender, AddPagesEventArgs e) 
    { 
     printDoc.AddPage(this); 

     printDoc.AddPagesComplete(); 
    } 

    private void PrintDic_Paginate(object sender, PaginateEventArgs e) 
    { 
     PrintTaskOptions opt = task.Options; 

     printDoc.SetPreviewPageCount(1, PreviewPageCountType.Final); 
    } 

    private void OnGetPreviewPage(object sender, GetPreviewPageEventArgs e) 
    { 
     printDoc.SetPreviewPage(e.PageNumber, this); 
    } 
} 
+0

謝謝,非常有幫助。我有MapControl中的RenderTargetBitmap,但似乎無法打印。我可以在屏幕控制中查看位圖,但是當我嘗試打印時通常是純色(每次都不一樣)。如果我在屏幕上渲染位圖,我可以看到它,但在打印預覽中,它非常空白。沒有得到任何錯誤,我可以看到綁定等。 –

+0

RenderTargetBitmap需要等待mapcontrol被加載,如果mapcontrol未加載它可能有奇怪的空白。 –

+0

不知道爲什麼這是必要的,但我通過將RenderTargetBitmap保存爲臨時目錄中的jpg圖像來完成所有工作。然後在我的XAML中綁定到該文件,打印輸出正常。 –