Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
WPF转换器静态文本_Wpf_Data Binding_Static_Converters - Fatal编程技术网

WPF转换器静态文本

WPF转换器静态文本,wpf,data-binding,static,converters,Wpf,Data Binding,Static,Converters,我正在尝试使用转换器实现我自己的翻译器。在转换器中,我调用一个包含翻译的静态类。此翻译在应用程序启动时加载 对我来说,使用这种转换器的主要优势有三个: 我在运行时根据XML语言文件翻译文本 在执行应用程序时,我在其他XML文件中注册了不带翻译的文本,以便以后添加翻译 必要时,翻译也应用于数据 当要翻译的文本来自绑定属性时,所有这些都可以正常工作,例如: <TextBox Grid.Row="1" Text="{Binding NameToShow, Converter={StaticRe

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

对我来说,使用这种转换器的主要优势有三个:

  • 我在运行时根据XML语言文件翻译文本
  • 在执行应用程序时,我在其他XML文件中注册了不带翻译的文本,以便以后添加翻译
  • 必要时,翻译也应用于数据
  • 当要翻译的文本来自绑定属性时,所有这些都可以正常工作,例如:

     <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=[包含静态翻译的命名空间]

    <TextBlock Text="{lib:StaticTranslation 'ABC',Converter={StaticResource TranslationConverter}}"/>
    
    
    
    当然,
    StaticTranslation
    中的转换器用法只是一个例子。您可能需要测试/改进代码以供生产使用

    旁注:


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

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

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

    它工作得很好。为了重用,我已经在类库项目中定义了转换器,所以它工作得很好。谢谢。哦,天哪,在选择写我的答案之前,我想给绑定源提供某种
    x:Static
    ,但我完全没有尝试最简单的源代码分配,已经在考虑复杂的源代码分配了+1@grek40,
    “{Binding Source={x:Static smth}}”
    也在工作:)()。与
    “{Binding Source={StaticResource resourceskey}}”相同
    是的,我知道。。。但我不知何故尝试将这种扩展与直接编写文本结合起来,而不是使用它来获取资源或静态属性,因为问题不是重定向到资源或属性:)