public MainWindow() { InitializeComponent(); Closing += (s, e) => ViewModelLocator.Cleanup(); mychrome.Address = "file:///E:/test.html"; mychrome.RegisterJsObject("callbackObj", new CallbackObjectForJs()); Closing += new System.ComponentModel.CancelEventHandler(MainWindows_Closing); } public class CallbackObjectForJs { public void showMessage() { //我想在这调用test_print1()方法,应该怎么写? } } public string test_print1() { //打印 PrintDialog pdlg = new PrintDialog(); if (pdlg.ShowDialog() == true) { FlowDocument doc = PrintPreviewWindow.LoadDocumentAndRender("OrderDocument.xaml", GlobalData.m_orderExample, new OrderDocumentRenderer()); Dispatcher.BeginInvoke(new DoPrintMethod(DoPrint), DispatcherPriority.ApplicationIdle, pdlg, ((IDocumentPaginatorSource)doc).DocumentPaginator); } return "文档已打印"; }
wpf,用的cef浏览器加载html页面,html页面上的JS调用c#的方法打印. 所有方法都测试没问题了,就是不知道怎么在CallbackObjectForJs里去调用打印的方法test_print1()
public class CallbackObjectForJs { public void showMessage() { //我想在这调用test_print1()方法,应该怎么写? test_print1(); } }
这样就行了。
为了防止你再问,如何在JS中调用showMessage,我就先剧透下, js中这样写就行了。
window.CallbackObjectForJs.showMessage();
不行的,提示:对象引用对于非静态的字段,方法或属性"ManWindows.test_print1()"是必须的
@pchief:
public class CallbackObjectForJs { public void showMessage() { //我想在这调用test_print1()方法,应该怎么写? } public string test_print1() { //打印 PrintDialog pdlg = new PrintDialog(); if (pdlg.ShowDialog() == true) { FlowDocument doc = PrintPreviewWindow.LoadDocumentAndRender("OrderDocument.xaml", GlobalData.m_orderExample, new OrderDocumentRenderer()); Dispatcher.BeginInvoke(new DoPrintMethod(DoPrint), DispatcherPriority.ApplicationIdle, pdlg, ((IDocumentPaginatorSource)doc).DocumentPaginator); } return "文档已打印"; } }
看出啥问题了吗?
@爱编程的大叔: (⊙o⊙)…没有,如果直接写到CallbackObjectForJs里 总提示:对象引用对于非静态的字段,方法或属性"ManWindows.XXX"是必须的.
我就是不知道这里到底怎么写
@爱编程的大叔: 搞定了!
private delegate void DoPrintMethod(PrintDialog pdlg, DocumentPaginator paginator); private void DoPrint(PrintDialog pdlg, DocumentPaginator paginator) { pdlg.PrintDocument(paginator, "Order Document"); } public void showMessage() { //打印 PrintDialog pdlg = new PrintDialog(); FlowDocument doc = PrintPreviewWindow.LoadDocumentAndRender("OrderDocument.xaml", GlobalData.m_orderExample, new OrderDocumentRenderer()); DoPrint(pdlg, ((IDocumentPaginatorSource)doc).DocumentPaginator); }
用的什么框架 aspx 还是其他的
wpf,用的cef浏览器加载html页面,html页面上的JS调用wpf的方法打印.
所有方法都测试没问题了,就是不知道怎么在CallbackObjectForJs里去调用打印的方法test_print1()
@pchief: 不会wpf.
还是老老实实写一个专门的服务出来吧
之前的系统是BS的,打印控件总有各种不兼容的问题。而且浏览器无法调用读卡器,只能想办法写个专用“浏览器”。