【问题标题】:Microsoft Visual Studio XAML UI Designer FileNotFoundException when Editing View编辑视图时出现 Microsoft Visual Studio XAML UI 设计器 FileNotFoundException
【发布时间】:2016-02-19 00:02:05
【问题描述】:

我在 Visual Studio 2012 上使用带有 .NET 4.5.2 的 WPF,并在编辑我的视图时在 XAML 视图中获得 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。

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

提前致谢!

【问题讨论】:

  • 不要使用屏幕截图,请右键单击并将实际错误文本保存到帖子中。
  • @OmegaMan 我知道文本是首选,但我的情况下的文本出现在我无法右键单击的工具提示中。我还想演示异常如何在源代码中显示为下划线,而不是像人们期望的那样显示为错误窗口。
  • 了解,顺便说一句,请注意窗口应用程序中的大多数模型弹出框都可以通过突出显示框并选择 CTRL-C 来复制其文本。这是一个从错误对话框中获取文本的老测试人员技巧。

标签: c# wpf xaml mvvm


【解决方案1】:

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

如果是设计模式,最好通过指定是否尝试来分隔这些部分,例如

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

由于虚拟机是问题,这里有选项。

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

【讨论】:

  • 这听起来很有希望,但是当我尝试将this 传递给GetIsInDesignMode() 时出现错误:Argument type '{Namespace}.MainWindowViewModel' is not assignable to parameter type 'System.Windows.DependencyObject'
  • @KyleV 对,我在主页的代码隐藏中实例化了我的虚拟机,this 就是那个主页。如果您无法在代码后面创建虚拟机。我建议你在你的虚拟机上创建一个布尔值,并在主页的构造函数中根据结果进行赋值。
  • 抱歉,我无法通过创建布尔值并将结果分配给它来理解您的意思?能举个例子吗?
猜你喜欢
  • 2010-10-04
  • 2018-04-04
  • 2014-05-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-11-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多