WPF应用程序在通过doPDF打印机打印到文件后引发异常

WPF应用程序在通过doPDF打印机打印到文件后引发异常,wpf,xaml,printing,Wpf,Xaml,Printing,我已经制作了一个wpf独立应用程序用于会计目的。该应用程序工作正常,可以很好地打印到外部打印机或microsoft XPS打印机。当我选择doPDF(一个输出pdf文件的应用程序)作为打印机时,问题就出现了。输出刚刚好;它创建pdf文件并保存它,但是,当我返回应用程序并按下任意按钮时,会抛出一个未处理的XamlParseException错误,该错误表示 '对与指定绑定约束匹配的类型'RegisterMaintenance.DisplayInvoice'调用构造函数时引发异常。'行号'5'和行位

我已经制作了一个wpf独立应用程序用于会计目的。该应用程序工作正常,可以很好地打印到外部打印机或microsoft XPS打印机。当我选择doPDF(一个输出pdf文件的应用程序)作为打印机时,问题就出现了。输出刚刚好;它创建pdf文件并保存它,但是,当我返回应用程序并按下任意按钮时,会抛出一个未处理的XamlParseException错误,该错误表示

'对与指定绑定约束匹配的类型'RegisterMaintenance.DisplayInvoice'调用构造函数时引发异常。'行号'5'和行位置'7'

InnerException:验证文件是否存在于指定位置

InnerException:使用相对路径时,请确保当前目录正确


为什么会发生这种情况,我可以做些什么来解决这个问题。

似乎最可能的原因是一些资源没有找到或已经被占用。请与我们共享行号“5”和行位置“7”的代码。

您可以使用调试器并在第5行上设置断点,其中调用了RegisterMaintenance.DisplayInvoice的构造函数。查看正在使用的文件路径并修复问题。或者,如果您非常自信这不是一个问题,您可以尝试/捕获并忽略异常,但我不建议这样做。

此pdf打印机似乎会更改进程的当前目录。 我可以为你的问题想出两种可能的解决办法

对于您的问题,第一个也是最明显的解决方法是使用“Transactions.xml”的绝对路径,并将其存储在app.config中。但是,如果您的应用程序被分发到不同的机器并安装在不同的位置,那么这可能会成为问题

第二种解决方法是在调用print函数之前临时存储当前工作目录,然后在它发生更改时恢复它。大概是这样的:

string path = Directory.GetCurrentDirectory();
//Do the print stuff
Directory.SetCurrentDirectory(path);

我在调试模式下运行解决方案,看到当前目录更改为保存pdf文件的目录。抛出以下错误“用户代码未处理FileNotFoundException”。这是XElement.Load(@“Transactions.xml”).Elements(“Transaction”)中的代码
var records=from r,其中r.Element(“发票”).haseelements选择r。由于目录已更改,程序无法找到Transaction.xml文件。奇怪的是,当我使用XPS并将文件保存到任何地方时,都不会发生这种情况