我有几种不同语言的字符串资源。正如您所看到的,所有这些都以大写字母开头,然后是小写字母。那么,有没有什么方法可以在不直接更改资源的情况下将所有这些转换为UPPERCASE?是否可以在XAML中执行此操作?也许结合Binding的转换器?
答案 0 :(得分:1)
这是同一件事的C#版本:
public class ToUpperConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, string language)
{
string stringValue = value as string;
return string.IsNullOrEmpty(stringValue) ? string.Empty : stringValue.ToUpper();
}
public object ConvertBack(object value, Type targetType, object parameter, string language)
{
throw new NotSupportedException();
}
}
在XAML中引用它:
<Page
x:Class="App1.MainPage"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="using:App1">
<Page.Resources>
<local:ToUpperConverter x:Key="UpperCaseConverter" />
</Page.Resources>
<StackPanel Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
<TextBlock Text="{x:Bind MyString, Converter={StaticResource UpperCaseConverter}}" />
</StackPanel>
</Page>
为了完整性,这是我x:Bind
的属性:
public sealed partial class MainPage
{
public string MyString => "Hello world!";
public MainPage()
{
InitializeComponent();
}
}
修改强>
在OP的评论中,@ RamakrishnanA询问这可能如何与资源配合使用。一点间接是一种方法。
在.resw
文件中,为Tag
属性提供值:
<data name="HelloWorld.Tag">
<value>Hello, world!</value>
</data>
现在使用x:Uid
将其绑定到Tag
的{{1}}属性,然后将TextBlock
属性绑定到标记,允许我们使用转换器:< / p>
Text
输出:
答案 1 :(得分:0)
你自己说出了答案。使用转换器。
Public Namespace Converter
Public Class ToUpperValueConverter
Implements IValueConverter
Public Function Convert(value As Object, targetType As Type, parameter As Object, culture As CultureInfo) As Object
Dim str = TryCast(value, String)
Return If(String.IsNullOrEmpty(str), String.Empty, str.ToUpper())
End Function
Public Function ConvertBack(value As Object, targetType As Type, parameter As Object, culture As CultureInfo) As Object
Return Nothing
End Function
End Class
修改强>
要使用此转换器,您需要对您的属性使用某种绑定,而不是通常的x:Uid
方式。您无法直接绑定到资源。相反,您需要将资源转换为某种形式的代码,并通过ViewModel绑定它。这个SO answer会引导您完成这些步骤。但是,您可能必须使用类似ResW File Code Generator
PublicResXFileCodeGenerator
工具
我担心在纯XAML中无法做到这一点。