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 获取设备位置的奇怪问题