0
我有一个MapControl正在创建我的路线。现在,我只需要弄清楚一种打印方式。使用UWP打印样本,我得到一个黑盒子,控件应该在那里。正在构建地图和路线,只是在打印预览中没有正确渲染。我以为我看到一个MapControl.Print ...但我认为这是在Bing.Maps的东西。任何指针将不胜感激。谢谢。需要打印带有路线结果的UWP MapControl
我有一个MapControl正在创建我的路线。现在,我只需要弄清楚一种打印方式。使用UWP打印样本,我得到一个黑盒子,控件应该在那里。正在构建地图和路线,只是在打印预览中没有正确渲染。我以为我看到一个MapControl.Print ...但我认为这是在Bing.Maps的东西。任何指针将不胜感激。谢谢。需要打印带有路线结果的UWP MapControl
使用UWP打印样本,我得到一个黑盒子,控件应该在那里。
看来MapControl无法打印。
作为一个工作周,我们可以使用RenderTargetBitmap从MapControl
获取图片。我们可以打印图像。
使用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);
}
}
谢谢,非常有帮助。我有MapControl中的RenderTargetBitmap,但似乎无法打印。我可以在屏幕控制中查看位图,但是当我尝试打印时通常是纯色(每次都不一样)。如果我在屏幕上渲染位图,我可以看到它,但在打印预览中,它非常空白。没有得到任何错误,我可以看到绑定等。 –
RenderTargetBitmap需要等待mapcontrol被加载,如果mapcontrol未加载它可能有奇怪的空白。 –
不知道为什么这是必要的,但我通过将RenderTargetBitmap保存为临时目录中的jpg图像来完成所有工作。然后在我的XAML中绑定到该文件,打印输出正常。 –