如何从代码访问位于合并字典中的资源

时间:2019-04-22 12:18:12

标签: xaml xamarin.forms

我在Colors中有很多ResourceDicitonaries,像这样:

<ResourceDictionary xmlns="http://xamarin.com/schemas/2014/forms"
                    xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
                    xmlns:s="clr-namespace:System;assembly=netstandard">

    <Color x:Key="Color.Background">#301536</Color>
</ResourceDictionary>

我只是将两者都添加到App.xaml中,就像这样:

<!--Colors-->
<ResourceDictionary Source="Resources/Colors/Light.xaml"/>
<ResourceDictionary Source="Resources/Colors/Dark.xaml"/>

ResourceDicitonary文件只是一个.xaml文件,没有任何捆绑的.cs,并且两个字典都设置在App.xaml上,而不必在MergedDicionaries组。

尝试从代码中访问Color时,找不到它,好像它没有添加到资源列表中。

var color = Application.Current.Resources.FirstOrDefault(f => f.Key == "Color.Background")
    .Value as Color? ?? Color.Crimson;

有什么方法可以访问WPF中可用的资源FindResource/TryFindResource


我也尝试访问/查看MergedDictionaries的内容,但是由于某些原因,合并的字典始终为空。

2 个答案:

答案 0 :(得分:0)

根据您的描述,您想要在APP.xaml中添加多个ResourceDictionary,它不起作用。 我发现一篇有关此问题的文章,您可以看一下:

https://nicksnettravels.builttoroam.com/post/2018/09/02/Getting-Started-with-XamarinForms-and-Resource-Dictionaries.aspx

答案 1 :(得分:0)

感谢另一个人,我得以构建此工作代码:

internal static Color TryGetColor(string key, Color fallback)
{
    Application.Current.Resources.TryGetValue(key, out var color);

    return color as Color? ?? fallback;
}