WPF 转换器静态文本

WPF Converter Static Text

我正在尝试使用转换器实现我自己的翻译器。在转换器中,我调用了一个包含翻译的静态 class。此翻译在应用程序启动时加载。

我使用这个转换器的主要优点有三个:

  1. 我根据 XML 语言文件在运行时翻译文本。
  2. 在执行应用程序时,我在其他 XML 文件中注册了没有翻译的文本,以便稍后添加翻译。
  3. 翻译也会根据需要应用于数据。

当要翻译的文本来自绑定 属性 时,一切正常,例如:

 <TextBox Grid.Row="1" Text="{Binding NameToShow, Converter={StaticResource TranslationConverter}}"></TextBox>

问题是翻译静态文本,如标签、按钮内容...想法是这样的:

<Button Content={Binding "MyText",Converter={StaticResource TranslationConverter}} Command="{Binding InitializeAdapterCommand}"></Button>

显然,我既不想在资源中声明静态字符串,也不想使用可绑定属性。

有什么建议吗?

您可以创建自己的 MarkupExtension 而不是依赖绑定:

public class StaticTranslation : MarkupExtension
{
    public StaticTranslation()
    {
    }

    public StaticTranslation(string textToTranslate)
    {
        TextToTranslate = textToTranslate;
    }

    public string TextToTranslate { get; set; }

    public IValueConverter Converter { get; set; }

    public object ConverterParameter { get; set; }

    public override object ProvideValue(IServiceProvider serviceProvider)
    {
        if (Converter != null)
        {
            return Converter.Convert(TextToTranslate, typeof(string), ConverterParameter, CultureInfo.CurrentUICulture);
        }
        return TextToTranslate;
    }
}

并与 lib 一起使用 xmlns:lib=[namespace containing StaticTranslation]

<TextBlock Text="{lib:StaticTranslation 'ABC',Converter={StaticResource TranslationConverter}}"/>

当然StaticTranslation中的转换器用法只是一个例子。您可能想要测试/改进生产使用的代码。

旁注:

如果嵌套 Converter={StaticResource TranslationConverter} 时出错,请将标记扩展移至单独的 class 库项目。请参阅以下内容:

您可以使用 Binding.Source 属性 将常量值传递给转换器:

Text="{Binding Source='My Text', Converter={StaticResource TranslationConverter}}"