Pama.Items中使用的Xamarin.Froms MarkupExtension

时间:2015-11-16 13:42:41

标签: xaml translation xamarin.forms picker markup-extensions

我已经编写了一个标记扩展,用于使用资源翻译字符串。

[ContentProperty("Text")]
public class TranslateExtension : IMarkupExtension
{
    private readonly ILocalizationService _localizationService;

    public string Text { get; set; }

    public TranslateExtension()
    {
        _localizationService = Mvx.Resolve<ILocalizationService>();
    }

    public object ProvideValue(IServiceProvider serviceProvider)
    {
        if (Text == null)
            return "";

        return _localizationService.GetString(Text);
    }
}

如果我在XAML Elements的属性中使用它,它可以正常工作,如:

<Label Text="{i18n:Translate DebugView}" VerticalOptions="Center" HorizontalOptions="Center" />

但现在我想在Picker.Items中提供一个字符串列表。

<Picker SelectedIndex="0" HorizontalOptions="End" VerticalOptions="Center" Title="{i18n:Translate State}">
    <Picker.Items>
        <i18n:TranslateExtension Text="OnState"></i18n:TranslateExtension>
        <i18n:TranslateExtension Text="OffState"></i18n:TranslateExtension>
    </Picker.Items>
</Picker>

我没有让它发挥作用。仅当我在TranslateExtension中使用一个 Picker.Items元素时,才会正确显示。否则崩溃('TranslateExtension'无法转换为'System.String'类型)。我尝试了很多不同风格的编写元素,但我没有成功。写它的正确方法是什么?

1 个答案:

答案 0 :(得分:0)

a

试试这个