C# Crystal Reports-值不能为空。参数名称:窗口

C# Crystal Reports-值不能为空。参数名称:窗口,c#,wpf,crystal-reports,C#,Wpf,Crystal Reports,我最近在尝试通过对话框将crystal报表加载到WPF应用程序时遇到了一个异常错误,该报表将显示为正在加载几秒钟,然后抛出一个错误,说明“值不能为null。参数名称:window” 这让我很困惑,据我所知,crystal reports没有使用名为window的参数 这是我的密码: 带有CrystalReportsViewer的简单窗口 <Window x:Class="Client.Views.ReportsWindowView" xmlns="http://schemas.mi

我最近在尝试通过对话框将crystal报表加载到WPF应用程序时遇到了一个异常错误,该报表将显示为正在加载几秒钟,然后抛出一个错误,说明“值不能为null。参数名称:window

这让我很困惑,据我所知,crystal reports没有使用名为window的参数

这是我的密码:

带有
CrystalReportsViewer的简单窗口

<Window x:Class="Client.Views.ReportsWindowView"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:my="clr-namespace:SAPBusinessObjects.WPF.Viewer;assembly=SAPBusinessObjects.WPF.Viewer"
    Title="ReportsWindowView" Height="300" Width="300" Loaded="Window_Loaded">
<Grid>
    <my:CrystalReportsViewer ShowOpenFileButton="True" Grid.Column="1" x:Name="ReportView"/>
</Grid>

当Crystal Reports试图显示内部错误时,它确实使用了一个名为window的参数

CrystalReportsViewer
处理内部错误并尝试显示消息框:

System.Windows.MessageBox.Show(窗口所有者、字符串messageBoxText、字符串标题、MessageBoxButton按钮、MessageBoxImage图标)

Show方法get u201CWindow owneru201D参数,CrystalReportsView尝试传递所有者属性CrystalReportsView.Owner,但是默认情况下所有者为null,因此我们会收到此意外错误

一个简单的修复方法是在codebehind中(即使使用mvvm),我们只需通过以下代码将所有者设置为当前窗口:

ReportView.Owner = Window.GetWindow(this);
在OnLoaded事件或类似事件中执行此操作,您会发现现在您得到一个messagebox,其中包含由
CrystalReportsViewer
引发的内部错误

此解决方案的功劳属于此

ReportView.Owner = Window.GetWindow(this);