【发布时间】:2020-03-25 12:07:10
【问题描述】:
我有一个场景,我的 Xamarin 标签显示来自 ttf 文件的图标。就目前而言,标签如下所示。
<Label
Text="{StaticResource Account}"/>
Account 是我的 Styles.xaml 文件中定义十六进制值的字符串。
<x:String x:Key="Account"></x:String>
以上工作正常。但是,我想通过 ViewModel 中的属性绑定图标文本名称。以下不起作用,但我正在考虑这样的事情:
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。
【问题讨论】:
-
如果是虚拟机属性,请使用
"{Binding IconName}" -
这不太行,因为它只是绑定到一个字符串属性 IconName。实际资源是静态资源。
-
然后让你的属性的getter返回资源值
-
我用更多上下文更新了原始问题
-
使用 ValueConverter
标签: xamarin mvvm xamarin.forms