我有一个MapControl正在创建我的路线。现在,我只需要找出一种打印出来的方法。使用UWP打印样本,我得到一个控件应该是黑盒子。正在构建地图和路线,但在打印预览中无法正确渲染。我以为我看到了MapControl.Print ...但我认为那是在Bing.Maps的东西。任何指针将不胜感激。感谢。
答案 0 :(得分:0)
使用UWP打印样本,我得到一个控件应该是黑框。
似乎无法打印MapControl。
作为workround,我们可以使用RenderTargetBitmap从MapControl
获取图片。我们可以打印图像。
使用RenderTargetBitmap,您可以完成一些场景,例如将图像效果应用于最初来自XAML UI合成的视觉效果,生成导航系统子页面的缩略图图像,或者允许用户将部分UI保存为一个图像源,然后与其他应用程序共享该图像。
因为RenderTargetBitmap是ImageSource的子类,所以它可以用作Image元素或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);
}
}