当前位置:  开发笔记 > 编程语言 > 正文

在UWP应用程序中合并ResourceDictionary初始化

如何解决《在UWP应用程序中合并ResourceDictionary初始化》经验,为你挑选了1个好方法。

在我的UWP应用程序的开发过程中,我注意到并且有些奇怪,我很难解释.

我用户MvvmLight,我决定将ViewModelLocator资源实例添加到一个单独的ResourceDictionary Core.xaml中,该文件将MergedDictionariesApp.xaml中引用.以下是App.xaml的内容:



    
        
            
            
        
    


Core.xaml的内容:


    

现在我认为Core.xaml中的资源是InitializeComponentApp.xaml.cs中的方法调用期间初始化的,但是当我尝试使用ServiceLocator该类(在MvvmLight的ViewModelLocator的构造函数中设置)时 - 就像这样ServiceLocator.Current.GetInstance().Navigate();- 我得到了一个例外说:

An exception of type 'System.InvalidOperationException' occurred in
Microsoft.Practices.ServiceLocation.dll but was not handled in user code

Additional information: ServiceLocationProvider must be set.

实际上,如果我在ViewModelLocator的构造函数中放置一个断点,则在激活Window之前不会调用它.更有趣的是 - 如果我手动引用定位器资源键(例如置于Debug.WriteLine(Resources["Locator"]);调用之上ServiceLocator),一切正常.如果我将ViewModelLocator资源直接移动到App.xaml,那么同样如此- 然后在实例化期间进行实例化IntializeComponent.

在UWP应用程序中是否存在合并资源字典的惰性实例化?或者它为什么会这样?



1> Herdo..:

ResourceDictionaryUWP中的A 后面没有任何代码(否InitializeComponent).因此,a中定义的任何类引用ResourceDictionary都不会直接初始化.

App.InitializeComponent这对你来说也不是这样.UWP中的资源词典只是不提供这种功能 - 不要问我原因.

您可以轻松地尝试初始化一个尝试这种DataTemplateResourceDictionary.
这应该 - 可悲的是 - 都不行.

但是,使用Resources["Locator"]后面的代码访问会触发类的构造函数,你很好.

这不是解决方案,而是对您的问题的解释.我希望它对你有所帮助.

推荐阅读
路人甲
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有