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中綁定到該文件,打印輸出正常。 –