WPF转换器静态文本
我正在尝试使用转换器实现我自己的翻译器。在转换器中,我调用一个包含翻译的静态类。此翻译在应用程序启动时加载 对我来说,使用这种转换器的主要优势有三个:WPF转换器静态文本,wpf,data-binding,static,converters,Wpf,Data Binding,Static,Converters,我正在尝试使用转换器实现我自己的翻译器。在转换器中,我调用一个包含翻译的静态类。此翻译在应用程序启动时加载 对我来说,使用这种转换器的主要优势有三个: 我在运行时根据XML语言文件翻译文本 在执行应用程序时,我在其他XML文件中注册了不带翻译的文本,以便以后添加翻译 必要时,翻译也应用于数据 当要翻译的文本来自绑定属性时,所有这些都可以正常工作,例如: <TextBox Grid.Row="1" Text="{Binding NameToShow, Converter={StaticRe
<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}}”相同
是的,我知道。。。但我不知何故尝试将这种扩展与直接编写文本结合起来,而不是使用它来获取资源或静态属性,因为问题不是重定向到资源或属性:)