即使在运行时Visual Studio无法在WPF窗口中解析静态资源,为什么?
|
我有一个WPF窗口,正在使用MVVM模式。我将视图模型设置为窗口的资源,如下所示...
<Window
...other stuff removed for clarity...
xmlns:mvvm=\"clr-namespace:VisionRT.CRM.WPF.ViewModels.VRTSystems\"
>
<Window.Resources>
<mvvm:DhrTemplatesViewModel x:Key=\"viewmodel\" />
</Window.Resources>
我想将窗口的数据上下文设置为使用资源,并发现以下XAML起作用...
<Window.DataContext>
<StaticResource ResourceKey=\"viewmodel\"/>
<Window.DataContext>
问题是我只能通过手动键入XAML来执行此操作,Visual Studio不会在任何地方显示资源。我可以转到窗口的属性,然后单击DataContext属性旁边的小图标,单击“应用资源”选项,但它不会将“ viewmodel”显示为静态或动态资源。如果我手动输入XAML,然后打开\“ Apply resource \”弹出窗口,则会在\“ viewmodel \”下划线显示为错误,并且将鼠标悬停在其上会显示工具提示\“无法解析资源引用\”
但是,当我运行该应用程序时,它运行良好,因此在运行时正在解析资源。
有人可以解释吗?我真的很希望能够通过VS属性编辑器来执行此操作,因为与手动输入XAM1相比,这更方便。 VS无法解决它也使我感到困扰。这使我觉得自己做错了。
感谢您提供的任何解释。
没有找到相关结果
已邀请:
2 个回复
陷牡彭拈峰
掀辟髓观粟
,可以使Intellisense 100%工作。 经过测试 WPF / C# Visual Studio 2015更新3 步骤1:将资源转移到共享项目中 关键是将ѭ3引用的所有资源转移到共享项目中: 步骤2:设计时间智能 我们还没到那儿。如果您两次包含资源,则XAML运行时将引发运行时。 如果我们在整个项目中多次包含一个.xaml文件,则可以在设计时包含它,但不能在运行时包含它:
然后,我们可以添加设计时间资源:
如果我们使用的是ReSharper,它将提供自动将名称空间前缀添加到标题中的功能:
附录A:专家额外信息:为什么需要执行步骤1? 顺便说一句,XAML中的Intellisense与C#中的Intellisense相同:它仅适用于引用的子项目。这就是为什么如果项目A和B要共享一些代码,则必须将其放在项目A和B引用的类库C中。这与C或C ++相反,在C或C ++中,在根中包含文件使它成为代码可用于所有子文件。 使用XAML,您可以作弊并将静态资源添加到“ 7”中(如上所述),并且XAML运行时仍然可以正常工作-但Intellisense在设计时将无法正常工作,大概是因为它基于用于C#intellisense的同一引擎。 若要使Intellisense始终在XAML中工作,Visual Studio Intellisense将必须向上扫描每个父项目(而不是向下扫描到引用的项目)。