2016-02-16 85 views
1

当我使用WPF上的Visual Studio .NET 2012和4.5.2中获得的XAML视图中的FileNotFoundException异常编辑我查看时,微软的Visual Studio XAML UI设计师FileNotFoundException异常应用程序编译并运行正常,否则。该例外仅表示为蓝色下划线。编辑视图

我调试了XDesProc.exe,发现这是异常的来源。原因是它的工作目录是C:\Program Files (x86)\Microsoft Visual Studio 11.0\Common7\IDE,所以它在错误的地方寻找配置。

它发生在我身上,这可能是应用程序中的设计问题。唯一的例外正从MainWindowViewModel.cs扔在这条线:

RemotingConfiguration.Configure("ZZZZZ.exe.config", false);

我相信当XAML UI设计达到我View.xaml的这部分正在达到这条线:

<Window.DataContext> 
    <vm:MainWindowViewModel/> 
</Window.DataContext> 

这是我实例化我的ViewModel并将其分配给DataContext的地方。

我想我需要移动我的ViewModel构造函数以外的RemotingConfiguration.Configure(),但我不知道该把它放在哪里。我相信这是解决我的问题的方法。

在此先感谢!

+0

不要使用屏幕捕获,点击右键,实际的错误文本保存到发帖请。 – OmegaMan

+0

@OmegaMan我明白,文字是首选,但在我的情况下,文字出现在工具提示,我不能右键单击。我还想演示异常如何体现为源代码中的下划线,而不是人们所期望的错误窗口。 –

+0

应该理解,请注意,窗口应用程序中的大多数模型弹出框可以通过突出显示框并选择CTRL-C来复制其文本。它的一个老测试人员诡计从错误对话框中获取文本。 – OmegaMan

回答

1

在设计模式中,在xaml中指定的控件和实例被实例化。在您的虚拟机(或其他区域)中,可能存在不应在设计模式期间尝试的代码。

它最好通过指定是否要尝试它,如果它是设计模式,如

if (!DesignerProperties.GetIsInDesignMode(this)) { ... } // if not in design mode. 

由于VM是问题,这里的选项分离出来的部分。

  • 实例化后面的代码中的虚拟机,并且在设计模式下时,不要使用上述逻辑检查实例化它。
  • 如果虚拟机必须在xaml上实例化对于宗教原因,请按照下列步骤操作。
    1. 通过在Xaml中的虚拟机上添加Name属性来命名Xaml中的VM。
    2. 在名为IsInDesign的VM上创建一个布尔值(不必坚持INotifyPropertyChanged)。
    3. 在主页面的构造函数中检查是否在设计模式中使用上述逻辑并将该值分配给虚拟机的IsInDesign到指定的虚拟机。
    4. 在虚拟机的构造函数中(它应该在主页的构造函数后实例化)检查IsInDesign的值,并根据它的值停止加载/读取文件。
+0

这听起来很有希望,但当我尝试将'this'传递给'GetIsInDesignMode()'时,我得到一个错误:'参数类型'{Namespace} .MainWindowViewModel'不能分配给参数类型'System.Windows.DependencyObject'' –

+0

@ KyleV对,我在主页面的代码隐藏处实例化了我的虚拟机,而'this'就是那个主页面。如果您不能在代码后面创建虚拟机。我建议你在虚拟机上创建一个布尔值,并在主页的构造函数中通过结果进行赋值。 – OmegaMan

+0

对不起,我无法理解你的意思,通过创建一个布尔值并为其分配结果?你能给个例子吗? –