Как получить доступ к ресурсу, расположенному в объединенном словаре из кода - PullRequest
0 голосов
/ 22 апреля 2019

У меня есть куча 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;

Есть ли способ получить доступ к ресурсу, подобному FindResource/TryFindResource, доступному в WPF?


Я также пытался открыть / просмотреть содержимое MergedDictionaries, но по какой-то причине объединенные словари всегда пусты.

Ответы [ 2 ]

1 голос
/ 23 апреля 2019

Благодаря другому человеку я смог создать этот рабочий код:

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

    return color as Color? ?? fallback;
}
0 голосов
/ 23 апреля 2019

Согласно вашему описанию, вы хотите добавить несколько ResourceDictionary в APP.xaml, это не работает.Я нашел одну статью об этой проблеме, вы можете посмотреть:

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...