如何在xamarin.forms中的xaml中的标签处添加字符串:。我的文字来自(i18n:Translate Text = Supplier)的应用程序资源文件。现在,在此文本之后,我还将在该文本之后添加:。我不想在文本中添加:在应用程序资源中。我只想在xaml上做到这一点。我尝试了StringFormat,但不知道该怎么办。
答案 0 :(得分:0)
您可以使用Value Converter来更改Binding上的值,但这很棘手,因为在使用i18n:Translate时不容易添加转换器。但我仍然看到三种可能的解决方案来解决您的问题:
最简单的方法是创建一个属性,该属性获取翻译后的文本,然后在文本中添加冒号:
ViewModel:
public string Supplier
{
get { return AppResources.Supplier + ":"; }
}
XAML:
<Label Text="{Binding Supplier}"/>
另一种方法是创建一个属性,该属性获取翻译的文本,然后通过值转换器添加冒号:
ViewModel:
public string Supplier
{
get { return AppResources.Supplier; }
}
转换器类别:
public class ColonConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
return value += ":";
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
return value.ToString().Remove(value.ToString().Length - 1);
}
}
XAML:
<ContentPage.Resources>
<ResourceDictionary>
<local:ColonConverter x:Key="ColonConverter" />
</ResourceDictionary>
</ContentPage.Resources>
...
<Label Text={Binding Supplier, Converter={StaticResource ColonConverter}}"/>
3。创建自己的翻译扩展和价值转换器
我没有对此进行测试,但是我发现this SO answer给出了如何实现此目标的示例。这样,您无需向ViewModel添加属性,因此只需在设置Translate Extension和Converter后就调整XAML。但是需要编写自己的翻译扩展程序。
自定义TranslateExtension:
[ContentProperty("Text")]
public class TranslateExtension : IMarkupExtension
{
const string ResourceId = "Project.Resources.AppResources";
public string Text { get; set; }
public IValueConverter Converter { get; set; }
public object ProvideValue(IServiceProvider serviceProvider)
{
if (Text == null)
return null;
ResourceManager resourceManager = new ResourceManager(ResourceId, typeof(TranslateExtension).GetTypeInfo().Assembly);
string translatedText = resourceManager.GetString(Text, CultureInfo.CurrentCulture);
if (this.Converter != null)
{
translatedText = Converter.Convert(translatedText, typeof(string), null, CultureInfo.CurrentCulture).ToString() ?? translatedText;
}
return translatedText;
}
}
XAML:
xmlns:strings="clr-namespace:Project.Utils;assembly=Project"
<ContentPage.Resources>
<ResourceDictionary>
<converters:ColonSpaceConverter x:Key="ColonSpaceConverter" />
</ResourceDictionary>
</ContentPage.Resources>
<Label Text="{strings:Translate Money, Converter={StaticResource ColonSpaceConverter}}" />
答案 1 :(得分:0)
这可以通过多种方式实现,草拟了其中两种:(滑动滑块时标签的值会改变)
方法一
<Label Text="Slide to change Value"
VerticalOptions="CenterAndExpand"
HorizontalOptions="CenterAndExpand"
x:Name="lblSliderValue" FontSize="Title" Margin="60"></Label>
<Slider ValueChanged="Slider_ValueChanged"></Slider>
在代码隐藏文件中,
private void Slider_ValueChanged(object sender, ValueChangedEventArgs e)
{
lblSliderValue.Text = e.NewValue.ToString("0.00");
lblSliderValue.BackgroundColor = Color.Black;
lblSliderValue.TextColor = Color.White;
}
方法二(不需要代码隐藏文件中的代码)
<Label Text="Slide to change Value"
VerticalOptions="Center"
HorizontalOptions="Center"
Text="{Binding Source={x:Reference sldExample}, Path=Value, StringFormat='{0:F2}'}"></Label>
<Slider x:Name="sldExample" BackgroundColor="Yellow" ThumbColor="Violet"></Slider>