2016-05-30 18 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中绑定到该文件,打印输出正常。 –