Picker.Items 中使用的 Xamarin.Forms 标记扩展

Posted

技术标签:

【中文标题】Picker.Items 中使用的 Xamarin.Forms 标记扩展【英文标题】:Xamarin.Froms MarkupExtension used in Picker.Items 【发布时间】:2015-11-16 13:42:41 【问题描述】:

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

[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 元素的属性中使用它可以正常工作,例如:

<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>

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

【问题讨论】:

它几乎看起来像一个错误,但我不能确定。就像快速尝试解决方法一样,在 TranslateExtension 工作中覆盖 ToString() 方法。所以 ToString 返回翻译后的扩展名。 我明天试试。但我没有希望,因为没有使用默认的ToString。我什至尝试过隐式和显式转换运算符^^ 【参考方案1】:
<Picker SelectedIndex="0" HorizontalOptions="End" VerticalOptions="Center" Title="i18n:Translate State">
    <Picker.ItemsSource>
        <x:Array Type="x:Type x:String">
            <i18n:TranslateExtension Text="OnState"></i18n:TranslateExtension>
            <i18n:TranslateExtension Text="OffState"></i18n:TranslateExtension>
        </x:Array>
    </Picker.ItemsSource>
</Picker>

试试这个

【讨论】:

请添加更多关于您的答案的描述。 我已经在 Bugzilla 中报告了这个问题。见bugzilla.xamarin.com/show_bug.cgi?id=58155

以上是关于Picker.Items 中使用的 Xamarin.Forms 标记扩展的主要内容,如果未能解决你的问题,请参考以下文章

使用 Xamarin.Mobile 读取 Xamarin 表单中的联系人时出错

使用Xamarin Effect删除Xamarin.iOS中TextEntry上的圆角

有没有办法使用 Xamarin.Forms PCL 项目中的 Devexpress.Xamarin.Android.Charts

在 iOS 上的 Xamarin.Forms.Maps 中使用 Xamarin.Essentials Geolocation 获取设备位置的奇怪问题

如何在 Xamarin 中使用 SetAction

无法使用 Xamarin.Android 中的 Xamarin.Mobile 组件保存联系人