Я написал расширение разметки для перевода строк с использованием ресурсов.Xamarin.Froms MarkupExtension, используемый в Picker.Items
[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>
У меня нет работы. Только если я использую одинTranslateExtension
элемент в пределах Picker.Items
, это правильно показано. В противном случае он сработает («TranslateExtension» не может быть преобразован в тип «System.String»). Я пробовал много разных стилей написания элементов, но я не имел успеха. Каков правильный способ его написать?
Это почти похоже на ошибку, но я не могу быть уверен. Так же, как что-то быстрое, чтобы попробовать обходной путь, переопределяет метод ToString() в работе TranslateExtension. Таким образом, ToString возвращает переведенное расширение. –
Я попробую завтра. Но у меня нет надежды, потому что по умолчанию 'ToString' не использовался. Я даже попробовал неявный и явный оператор литья ^^ –