У меня есть сценарий, в котором моя этикетка Xamarin отображает значок из файла ttf. В существующем виде этикетка выглядит следующим образом.
<Label
Text="{StaticResource Account}"/>
Где Account - это строка в моем файле Styles.xaml, которая определяет значение Hex.
<x:String x:Key="Account"></x:String>
Вышеупомянутое работает нормально. Однако я хотел бы связать текстовое имя значка через свойство в моей модели просмотра. Следующее не работает, но я думаю о чем-то вроде этого:
Text="{StaticResource Binding=IconName}"
Как бы я этого добился?
ОБНОВЛЕНИЕ: добавление контекста к этому вопросу.
В моем Styles.xaml я определяю словарь, соответствующий их шестнадцатеричным значениям.
<x:String x:Key="Back"></x:String>
<x:String x:Key="Share"></x:String>
<x:String x:Key="Next"></x:String>
<x:String x:Key="Account"></x:String>
<x:String x:Key="Bell"></x:String>
<x:String x:Key="Mail"></x:String>
<x:String x:Key="Help"></x:String>
Этот файл стилей является ресурсом для моего файла xaml.
<ContentPage.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="Styles.xaml" />
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</ContentPage.Resources>
В моем файле XAML я повторяю, чтобы отобразить разные значки.
<StackLayout
x:Name="ItemsList"
Grid.Row="1"
BindableLayout.ItemsSource="{Binding MenuItems}">
<BindableLayout.ItemTemplate>
<DataTemplate>
<StackLayout>
<Label Text="{StaticResource Account}" FontFamily="{StaticResource FontIcons}"
FontSize="Large"></Label>
</StackLayout>
</DataTemplate>
</BindableLayout.ItemTemplate>
</StackLayout>
И в моем списке я указываю имя значка.
MenuItems = new List<AppMenuItem>()
{
new AppMenuItem()
{
Title = "View A",
IconSource = "Account",
},
new AppMenuItem()
{
Title = "View B",
IconSource = "Mail",
}
};
ОБНОВЛЕНИЕ 2: я пытаюсь создать преобразователь значений, но не могу получить доступ к объединенным словарям. Я использую:
Application.Current.Resources.TryGetValue (value.ToString (), out var retValue);
retValue всегда возвращает NULL.