代码之家  ›  专栏  ›  技术社区  ›  Alvaro

WPF转换器静态文本

  •  1
  • Alvaro  · 技术社区  · 8 年前

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

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

    例如,当要翻译的文本来自绑定属性时,所有这些都可以正常工作:

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

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

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

    有什么建议吗?

    2 回复  |  直到 6 年前
        1
  •  2
  •   ASh aminescm    8 年前

    您可以使用 Binding.Source

    Text="{Binding Source='My Text', Converter={StaticResource TranslationConverter}}"
    
        2
  •  1
  •   grek40    8 年前

    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} https://stackoverflow.com/a/11785549/5265292

    推荐文章