首页 文章

StaticResource在设计中工作,在运行时抛出XamlParseException

提问于
浏览
1

这看起来很傻,但我一直在寻找几个小时,没有找到解决这个问题的东西 .

我正在使用MvvmLight . 我有一个简单的MainWindow,除了Grid之外什么都没有 . 我有另一个类,它是一个包含一个按钮的WPF UserControl . 这两个都有

DataContext="{Binding Main, Source={StaticResource Locator}}"

在他们的节点定义中(Window或UserControl) . App.xaml在其资源中有标准条目:

<vm:ViewModelLocator x:Key="Locator" d:IsDataSource="True" />

我正在玩消息,我收到一条消息,说明在MainWindow中加载此UserControl . 我可以追踪并且一切都可以正常工作 - 直到它实例化新的UserControl并且后面的代码执行其InitializeComponent() .

此时,应用程序在用户控件的.xaml文件中停止,并且XamlParseException抱怨它无法找到“Locator”(是的,我知道,资源名称区分大小写,谢谢) .

这对我来说完全没有意义 . 在用户控件的设计模式中,我可以导航到我想要的数据上下文 - 它看到Locator,Locator看到Main,Main看到我绑定到按钮的属性 . 设计师在按钮上显示文字 .

任何人???

这是VS 2010 Ultimate中的C#,v10.0.30319.1,在Windows 7中运行 .

1 回答

  • 0

    嗯,关于实例化xaml对象(例如,InitializeComponent)的消息传递及其顺序确实很重要 . 在我的原始代码中,我发送消息以从MainViewModel构造函数加载UserControl;这是在MainWindow的InitializeComponent()调用期间发生的 .

    从构造函数中删除了消息,并简单地将UserControl加载到从InitializeComponent()方法返回的MainWindow AFTER中 . 果然,没问题,它运作正常 .

    然后我向MainViewModel添加了一个名为UIReady()的方法,并在完成后从MainWindow调用了这个方法 . MainViewModel中的UIReady()方法只是发出加载UserControl的消息 . 它有效,没问题 . 这是一个协调事物的额外方法,但它实现了我想要的东西 - 在ViewModel请求特定视图之前,MainWindow不知道将在其中加载什么UserControl . 然后它加载表示该View的UserControl .

    我不太了解InitializeComponent的所有结束和出局,但是SOMETHING在那里不喜欢初始化另一个xaml obect,直到它完成它自己的初始化;它与事物失去联系 - 比如应用资源 .

相关问题