【发布时间】:2021-06-14 08:17:27
【问题描述】:
我有一个 Xamarin 应用程序,我在其中实施了一项服务来进行一些打印。我在 UWP 应用上创建该服务是因为它需要一些依赖项。
UWP 服务:
public class PrintUWPService
{
PrintManager printmgr = PrintManager.GetForCurrentView();
PrintDocument PrintDoc;
PrintDocument printDoc;
PrintTask Task;
private Windows.UI.Xaml.Controls.WebView ViewToPrint = new Windows.UI.Xaml.Controls.WebView();
public PrintUWPService()
{
printmgr.PrintTaskRequested += Printmgr_PrintTaskRequested;
}
public async void Print(WebView viewToPrint, string htmlSource)
{
ViewToPrint.NavigateToString(htmlSource);
if (PrintDoc != null)
{
printDoc.GetPreviewPage -= PrintDoc_GetPreviewPage;
printDoc.Paginate -= PrintDoc_Paginate;
printDoc.AddPages -= PrintDoc_AddPages;
}
printDoc = new PrintDocument();
try
{
printDoc.GetPreviewPage += PrintDoc_GetPreviewPage;
printDoc.Paginate += PrintDoc_Paginate;
printDoc.AddPages += PrintDoc_AddPages;
var showprint = await PrintManager.ShowPrintUIAsync();
}
catch (Exception e)
{
Debug.WriteLine(e.ToString());
}
PrintDoc = null;
GC.Collect();
}
private void Printmgr_PrintTaskRequested(PrintManager sender, PrintTaskRequestedEventArgs args)
{
var deff = args.Request.GetDeferral();
Task = args.Request.CreatePrintTask("Grocery List", OnPrintTaskSourceRequested);
deff.Complete();
}
async void OnPrintTaskSourceRequested(PrintTaskSourceRequestedArgs args)
{
var def = args.GetDeferral();
await Windows.ApplicationModel.Core.CoreApplication.MainView.CoreWindow.Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, () =>
{
args.SetSource(printDoc.DocumentSource);
});
def.Complete();
}
private void PrintDoc_AddPages(object sender, AddPagesEventArgs e)
{
printDoc.AddPage(ViewToPrint);
printDoc.AddPagesComplete();
}
private void PrintDoc_Paginate(object sender, PaginateEventArgs e)
{
PrintTaskOptions opt = Task.Options;
printDoc.SetPreviewPageCount(1, PreviewPageCountType.Final);
}
private void PrintDoc_GetPreviewPage(object sender, GetPreviewPageEventArgs e)
{
printDoc.SetPreviewPage(e.PageNumber, ViewToPrint);
}
}
}
然后我为它创建接口:
public interface IPrintUWPService
{
void Print(WebView viewToPrint, string htmlSource);
}
现在在我的共享项目的一个类中,我想将此服务称为:
private readonly IPrintUWPService _printService = DependencyService.Get<IPrintUWPService>();
但它不起作用。它说:
IPrintUWPService 在当前上下文中不存在
所以我尝试访问 UWP 类:
using MyCompany.ProjectName.App.UWP
但它说“UWP”命名空间不存在。我究竟做错了什么?共享项目内的 UWP 项目不能调用服务吗?问候
【问题讨论】:
-
是共享项目中定义的接口吗?您是否阅读过使用 DependencyService 的文档和示例?
-
否,共享项目中没有定义,如何定义?你能和我分享一下那个文件吗? @杰森
-
字面移动共享项目中的接口文件。这些文档是 Google 上的第一击 - docs.microsoft.com/en-us/xamarin/xamarin-forms/app-fundamentals/…
-
太棒了,谢谢! @杰森