从后面的代码中的ResourceDictionary中检索值

ear*_*ing 4 xaml resourcedictionary windows-10 uwp

我有一个Windows 10通用应用程序,其中包含一些用于样式的资源字典等.在一个这样的资源字典中,我有一种颜色,MyBlue我想通过后面的代码访问.这是如何实现的?

我已经尝试过this.Resources["MyBlue"],但由于MyBlue是在一个单独的资源字典中定义而不是直接在页面资源中定义,因此它不存在于此集合中.

这是我的app.xaml:

<Application.Resources>

    <ResourceDictionary>
        <ResourceDictionary.MergedDictionaries>
            <ResourceDictionary Source="Styles/PodStyles.xaml"/>
            <ResourceDictionary Source="Styles/ButtonStyles.xaml"/>
            <ResourceDictionary Source="Styles/OfferStyles.xaml"/>
            <ResourceDictionary Source="Styles/MyStyles.xaml"/>

            <ResourceDictionary>
                <!--Global View Model Locator-->
                <vm:ViewModelLocator x:Key="Locator"
                                     d:IsDataSource="True"/>
            </ResourceDictionary>
        </ResourceDictionary.MergedDictionaries>
    </ResourceDictionary>

</Application.Resources>
Run Code Online (Sandbox Code Playgroud)

Igo*_*lic 5

你有没有尝试过

Application.Current.Resources["MyBlue"]
Run Code Online (Sandbox Code Playgroud)


ear*_*ing 4

MergedDictionaries 可通过 获得Application.Current.Resources.MergedDictionaries

我能够通过 Uri 获取适当的 ResourceDictionary,然后通过键名访问其中的项目:

var mergedDict = Application.Current.Resources.MergedDictionaries.Where(md => md.Source.AbsoluteUri == "ms-resource:///Files/Styles/MyStyles.xaml").FirstOrDefault();
newColor = (Windows.UI.Color)mergedDict["MyBlue"];
Run Code Online (Sandbox Code Playgroud)